Spring.Net 技术简介 IOC and DI
2013-10-15 21:46
381 查看
一 简单介绍
IOC 控制转移,就是将创建放到容器里,从而达到接耦合的目的,DI是 在容器创建对象的时候,DI读取配置文件,然后给对象赋默认值,两者一般结合使用,实现注入。Spring.Net的功能:自动装配、属性和构造器参数依赖注入、依赖检查、生命周期接口等等,使用起来感觉更多的是配置,非常关键的就是App.Config配置文件
技术使用的场景:在需要进行模块之间解耦操作的时候可以用到,一般的解耦操作用的都是面向接口编程,从而达到模块之间的解耦,解耦的意思就是:即使下一级模块修改后,依赖它的上一级模块也不需要改变,这就是解耦了。通常的做法,其中一种做法是,先抽象下一级模块的接口,在下一级模块和上一级模块之间创建一个工厂模块,上一级使用下一级抽象出的接口进行编程,实例使用工厂模块进行实例。工厂模块实例的方法有很多,简单的是直接实例,高级的是通过反射进行实例。具体可以在工厂模式中了解,之后也会针对几种设计模式写博文,紧急需要的可以给我留言,可以将我的个人总结发给你先。
从上面的介绍,这个方法其实挺麻烦的,而使用spring.net则相对简单很多,简单配置就可以达到效果。
本文只是入门,更深入的学习请通过API文档进行详细学习。
关于Spring.Net的缺点也是不得不提到的,Spring.Net本质毕竟还是反射,性能方面会有些损失,不适合对性能要求高的大访问量的互联网项目,不过在企业级应用中,OA系统,HR系统,都是完全没有问题的,以及访问量中等的,起码几千人在线访问,也不是有很大问题,具体使用,需要斟酌。
二 创建对象,以及设置属性
下载好Spring.Net,新建项目一般在目录下 \Spring.NET-2.0.0-M1\Spring.NET\bin\net\4.0\release,下面是一堆得dll,下面就可以可是新建项目测试了
新建一个控制台
主要使用 Common.Logging.dll 日志,Spring.Core.dll 核心库
创建好了项目,然后我们就要开始了
先修改App.config
<? xml version =" 1.0 " encoding =" utf-8 " ?> < configuration> < configSections> < sectionGroup name = "spring " > <!-- 这下面有context和object在下面都有对象的标签 --> < section name = "context " type = "Spring.Context.Support.ContextHandler, Spring.Core " /> < section name = "objects " type = "Spring.Context.Support.DefaultSectionHandler, Spring.Core " /> </ sectionGroup > </ configSections> < spring> <!-- Spring.Net对象容器的配置 --> < context > <!-- 容器的所有的对象在哪里,这里用uri说明地址 --> < resource uri = "config://spring/objects " /> <!-- 可以使用外部xml文件 --> </ context > <!-- objects:配置的容器里面的对象 --> < objects xmlns = "http://www.springframework.net " > < description >An example that demonstrates simple IoC features. </ description> <!-- name最好用类名,type第一个是类的全称加上程序集,后面一个是项目名称 --> < object name = "UserInfoDal " type = "SpringNetDemo.UserInfoDal, SpringNetDemo " > <!-- 在这里是设置对象的属性,将Name的值设置成ctt --> < property name = "Name " value = "ctt " /> </ object > </ objects > </ spring> </ configuration>
[align=left] 这里注意:配置放在<startup>标签后面会报错 “Spring.Context.Support.ContextRegistry”的类型初始值设定项引发异常,放在<startup>标签前面就可以了。[/align]
[align=left] [/align]
public class UserInfoDal : IUserInfoDal { public string Name { get; set; } public void Show() { Console .WriteLine("zjh and "+Name ); } }
[align=left]Program里面[/align]
class Program { static void Main(string [] args) { //IApplicationContext是Spring里面的一个超类,主要操作类 IApplicationContext ctx = ContextRegistry .GetContext(); //GetObject从配置文件中读取信息后,反射产生相应的对象,用as强转成对象的接口 IUserInfoDal userInfoDal = ctx.GetObject("UserInfoDal" ) as IUserInfoDal; //轻松加愉快,就这样出来了 userInfoDal.Show(); Console .ReadKey(); } }
[align=left]结果 zjh and ctt[/align]
[align=left] [/align]
三 创建复杂属性的设置
[align=left] 创建一个服务测试类[/align]public class UserInfoService { public IUserInfoDal UserInfoDal { get ; set; } public void Show() { UserInfoDal.Show(); Console .WriteLine("it is service" ); } }
[align=left] [/align]
[align=left] 配置文件配置[/align]
[align=left] [/align]
<? xml version =" 1.0 " encoding =" utf-8 " ?> < configuration> < configSections> < sectionGroup name = "spring " > <!-- 这下面有context和object在下面都有对象的标签 --> < section name = "context " type = "Spring.Context.Support.ContextHandler, Spring.Core " /> < section name = "objects " type = "Spring.Context.Support.DefaultSectionHandler, Spring.Core " /> </ sectionGroup > </ configSections> < spring> <!-- Spring.Net对象容器的配置 --> < context > <!-- 容器的所有的对象在哪里,这里用uri说明 --> < resource uri = "config://spring/objects " /> <!-- 可以使用外部xml文件 --> </ context > <!-- objects:配置的容器里面的对象 --> < objects xmlns = "http://www.springframework.net " > < description >An example that demonstrates simple IoC features. </ description> <!-- name最好用类名,type第一个是类的全称加上程序集,后面一个是项目名称 --> < object name = "UserInfoDal " type = "SprintNetDemo.UserInfoDal, SprintNetDemo " > <!-- 在这里是设置对象的属性,将Name的值设置成ctt --> < property name = "Name " value = "ctt " /> </ object > <!-- 在这里配置UserInfoService对象 --> < object name = "UserInfoService " type = "SprintNetDemo.UserInfoService, SprintNetDemo " > <!-- 在这里配置UserInfoService对象的UserInfoDal属性,执行上面产生的对象 --> < property name = "UserInfoDal " ref = "UserInfoDal " /> </ object > </ objects > </ spring> </ configuration>
[align=left] [/align]
[align=left]program代码[/align]
[align=left] [/align]
static void Main( string[] args) { //IApplicationContext是Spring里面的一个超类,主要操作类 IApplicationContext ctx = ContextRegistry .GetContext(); //创建出对象,主要在配置文件中对UserInfoService的UserInfoDal属性进行复制 UserInfoService userInfoService = ctx.GetObject( "UserInfoService" ) as UserInfoService; userInfoService.Show(); Console.ReadKey(); }
[align=left] [/align]
[align=left]结果[/align]
zjh and ctt
it is service
[align=left] [/align]
四 总结
[align=left] [/align][align=left] 本文主要,简单地讲解了一些Spring.Net的例子,我这次也是项目中用到了,将自己的一些使用心得写出来,虽然例子比较简单,但是还是可以看出Spring.Net的强大之处,当然这里介绍的只是冰山一角。[/align]
[align=left] Spring.Net的中文文档,2007就没有再更新过了,如果大家想进一步学习,推荐阅读英文文档,当然英文不太好,阅读java的spring一样样的,嘿嘿,java有中文文档哟。[/align]
[align=left] 如果有错误,欢迎指出来,谢谢。[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
相关文章推荐
- Spring.Net---3、IoC/DI深入理解
- Spring的核心技术:IoC和DI
- spring.net中间IoC、DI和MVC
- Spring.Net---4、IoC/DI注入方式
- spring.net中的IoC、DI和MVC
- Spring.net 控制反转(IOC)依赖注入(DI)的使用 以及Config文件的配置
- 简介 Spring中的IOC,DI,AOP
- spring.net中的IOC和DI-初使用
- 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(5.1) 登录功能的实现,开始接触Spring IOC、DI
- Spring 核心技术——IoC 之 DI (2)
- Spring核心技术阐述(IOC、DI、AOP)
- ASP.NET MVC中使用Spring.Net实现IOC和DI
- IoC Container Benchmark - Unity, Windsor, StructureMap and Spring.NET
- Spring.Net实现IOC和DI
- Spring核心技术(一)——IoC容器和Bean简介
- IoC Container Benchmark - Unity, Windsor, StructureMap and Spring.NET
- springIoCAndDI
- Spring核心技术阐述(IOC、DI、AOP)
- 4.Spring4.x学习[核心篇][IOC/DI简介以及Spring中IOC的方式介绍]
- Spring 核心技术——IoC 简介