从该文章开始主要学习Spring.NET框架,对于很多程序员来说,Spring.NET框架是矛盾的,大家必须配置一些以前没有接触的文件,同时更多的程序员却还不知道Spring.NET框架究竟是什么玩意,本章节主要介绍Spring.NET框架简介及模块说明。
Spring框架天生丽质,因其先进架构系列沿思想集成,使从产生就深得欢迎,设计模式运炉火纯青地方,幽雅魅力征服许JAVA,使这些成信徒,得程序员心得天,Spring引领J2EE潮流,同时Spring各种框架强强联手信徒尽早飞翔插翅膀,比如老哥SSH(配置烦琐strutsHibernate、Spring集成)、起秀EJSA(身材轻便使灵活及零配置EASYJWEB+JPA+Spring+Acegi,适合注重效率个人企业)等都借助Spring走向成熟,带无尽方便。
那么做.Net们能不能欣赏品尝Spring这道餐呢,答案肯定,Spring团队应JAVASpring框架思想进行移植,贡献出适合.Net项目Spring.NET框架。网Spring.Net文资料少,BAIDU目搜索不关于spring.net文资料,这里们尽能使文说明。
首先们认识Spring.NET,简而言Spring.NET就利各种强设计模式做工具管理们项目体系结构。 Spring.NET使优秀久经考验设计模式,使们能够科学合理管理整合们企业级各个层面及些分散组,并良好协调处理们间关系,增强项目健壮性。
Spring.NET IoC容器所解决,企业应类、象服务组合成应程序问题。IoC容器通过统(按:formalized,言意这些方式都已经定型、经过业界年考验)方式分散组组合成完整应程序。Spring.NET框架所采,都被业界无数应程序考验年、已经被定型设计模式最佳编程方式,实际,这些模式已经成们架构时法典,而通过Spring.NET,们以直接们整合自己应程序。目已有组织机构Spring框架出强壮、维护性好应程序,这确实非常好。
下图主要描述Spring.NET框架模块说明:
1、Spring.Core作整个框架基础,实现依赖注入功能。
Spring.NET部分模块都依赖或扩展该模块。Spring.Core基础IObjectFactory接口,该接口个简单而优雅方式实现工厂模式,使们以无需自行编singleton类型众服务定位器,并象配置及其依赖关系具体程序逻辑解耦。该模块IApplicationContext接口IObjectFactory扩展,增加诸企业级功能,包括使资源文进行文本本地化、事传播资源装载等等。
2、Spring.AOP业务象提供面向方面编程(AOP)支持。
AOP完善IoC容器功能,创建企业应使声明式服务奠定坚实基础。
3、Spring.WebASP.NET进行系列功能扩展,包括ASP.NET页面进行依赖注入、双向数据绑定、ASP.NET 1.1使Master page、以及增强本地化功能支持等。
4、Spring.Services任意“普通”象(意没有继承任何指定基类型象)发布企业服务(COM+)或远程象。
通过依赖注入特性元数据覆盖等功能,该模块使.NETWeb服务获得极灵活性。同时支持Windows台服务。
5、Spring.Data定义个抽象数据访问层,以跨越各种数据访问技术(从ADO.NET各种ORM)进行数据访问。
该模块包含个ADO.NET抽象层,减少使传统ADO.NET进行编码事务管理时工作量。
6、Spring.ORM时流行ORM类库提供个整合层,其包含声明式事务管理等诸功能。
通过以上的介绍,大致对Spring.NET框架有个粗略的了解,至于如何在项目开发中引入Spring.NET框架以及如何使用Spring.NET框架协助系统开发,将在后面的章节给出详细的说明。
由于目前还没有找到Spring.NET的作用和强大所在,而J2EE方面的Spring介绍文章相当的普遍,再此转载了一篇关于《spring作用》的文章,该文章涉及的内容不深,但是很简单的解释了Spring框架的作用和使用方法。【注意以下代码为Java代码,只为说明spring】
应用背景:有一个应用,要求能够很好地接受u盘或者移动硬盘(假如两种介质的读写算法不一样)的接入,你如果是开发人员,应该怎么样开发这个应用?
•注意:程序里面只有两个功能:ReadInfo(),WriteInfo()
•方案1:在应用里面将所有可能的介质算法都开发一遍。但此方法不好,每次都要修改代码
•方案2:用spring管理
如下:
1、定义U盘类:
//定义U盘类 package usbdisk; import app.IDISK; public class UsbDisk implements IDISK{ public String readInfo(){ return "从U盘读过来的信息"; } public void writeInfo(String msg){ System.out.println("向U盘写出信息:" + msg); } }
2、定义移动硬盘类:
package movedisk; import app.IDISK; public class MoveDisk implements IDISK{ public String readInfo(){ return "从移动硬盘读过来的信息"; } public void writeInfo(String msg){ System.out.println("向移动硬盘写出信息:" + msg); } }
3、定义一个接口管理U盘和移动盘:
package app; public interface IDISK { public abstract String readInfo(); public abstract void writeInfo(String msg); }
4、编写配置文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!-- 对象的生成,由框架通过反射机制完成,控制权从前端主程序转化到了框架, 这种思想叫做控制反转(IOC),Inverse Of Control,可以很好的实现模块切换--> <bean id="disk" class="usbdisk.UsbDisk"></bean> </beans>
5、编写测试代码:
package app; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; public class MainModule { public static void main(String[] args) { //读取配置文件 ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml"); IDISK disk =(IDISK)context.getBean("disk");//根据配置文件的内容,实例化对象并且返回 disk.writeInfo("你们好"); } }
可以看到此disk是指usbdisk.UsbDisk,指的是U盘,如果要改为移动盘呢,只要在配制文件中改<bean id="disk" class="movedisk .MoveDisk "></bean> class的值就可以了。
调用方(应用)和模块(u盘或者移动硬盘)之间用配置文件联系起来。
当u盘或者移动硬盘接入时,改变配置文件,调用方始终在读配置文件,并没有改变源代码.
配置文件改变,可以进行模块切换,甚至改变模块行为。
测试代码仅仅面向接口编程,而无需知道实现类的具体名称。同时,我们可以很简单的通过修改配置文件来切换具体的底层实现类。
•Spring作用1:这种思想可以很好地实现同类不同质的模块切换:例如要用不同的方法将内容写入到不同的介质组件依赖关系减少,上面的例子中,我们通过Spring,在运行期动态将字符串注入到实现类的属性中。这种概念将参数传递交给容器去做,叫做依赖注入.
•Spring作用2:可以方便地通过配置文件改变模块行为,动态注入属性值。
由此可见Spring可以更好的帮助我们实现代码分离。