Spring.Net框架技术

上传人:猪** 文档编号:242973225 上传时间:2024-09-13 格式:PPT 页数:32 大小:707KB
返回 下载 相关 举报
Spring.Net框架技术_第1页
第1页 / 共32页
Spring.Net框架技术_第2页
第2页 / 共32页
Spring.Net框架技术_第3页
第3页 / 共32页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Spring.Net,框架技术,2012-2-13,引用资料:,http:/, of Control,,英文缩写为,IoC,),,也叫依赖注入,(Dependency Injection),。控制反转的意思是依赖对象,(,控制权,),发生转变,由最初的类本身来管理依赖对象转变为,IoC,框架来管理这些对象,使得依赖脱离类本身的控制,从而实现松耦合。,3,种实现方式比较:,1,、一般方法:对象间直接耦合;,2,、工厂方法:对象间通过工厂耦合;,3,、,IoC,方法:把耦合放入,XML,文件,通过容器这需要的时候把这个依赖关系形成;可以看成是工厂模式的升华。,2,、环境搭建,1,、常用,dll,(,注意,dll,的版本区分,),Common.Logging.dll,(,必需,),Spring.Core.dll,(,必需,),Spring.AOP.dll,2,、配置文件的读取方式,实际物理路径:,IResource,input = new,FileSystemResource(D:Objects.xml,);,IObjectFactory,factory = new,XmlObjectFactory(input,);,程序集下读取文件:,string,xmlFiles,= new string ,file:/,文件名,assembly:/,程序集名,/,命名空名,/,文件名,;,IApplicationContext,context = new,XmlApplicationContext(xmlFiles,);,3,、实现一个简易的,Ioc,框架,本节通过手动实现一个简易的,IoC,框架的,来加深,IoC,的理论知识 。,4,、对象的创建,(1),一般有,3,种方式:构造器、静态工厂、实例工厂,1,、构造器,需满足的条件:,1.1,指明对象类型:,type=,“,类全名,程序集名,”,或使用,强命名,1.2,有一个,无参的构造函数,或者,默认构造函数,(,可以带参数,),例:,2,、静态工厂,创建一个静态工厂方法,并配置,factory-method,属性,例:,3,、实例工厂,需满足的条件:,3.1,创建一个实例工厂类,并配置,factory-method,和,factory-object,属性,3.2,实例工厂方法所在的对象必须配置在同一容器(或父容器)中,4,、对象的创建,(2),3.3,需创建对象的配置定义不能包含,type,属性,例:,4,、泛型类型的创建,泛型类型可采用上面,3,中任一方式创建,只是,type,属性的设置需注意:左尖括号,要替换为,&,lt,;,。,例:,!-,泛型类型,genericClass,-, SprintTest /,5,、容器中对象的作用域,(1),1,、容器对象的部署(,2,种),1.1 singleton,(,框架默认,),容器中只会有一个共享的实例,该对象只会被创建一次。,例:,1.2,非,singleton,每次请求,容器都会创建一个新的实例;当脱离调用方法的作用域后,该对象会被容器自动销毁。,例:,5,、容器中对象的作用域,(2),2,、实例化延迟(,lazy-init,),作用:当容器初始化时进行对象实例化(,框架默认,),还是在调用,GetObject,方法时才进行对象实例化。,例:,注:设置为,lazy-init=true,时应用程序启动会快一点,但在启动的时不能够检测错误,如果在调用的时候一旦发生错误,后果是不堪设想的;需要在搭建应用时考虑。,6,、依赖注入,(DI),IoC,容器的一种用途就是,解耦合,,其中最经典的就是:依赖注入,(,Dependeny,Injection),简称,DI,,目前,DI,是最优秀的解耦方式之一。,1,、里氏替换原则,(LSP),LSP,:子类必须能够替换掉它们的基类。,缺点:但在子类的实现中还是会存在一些耦合。,2,、经典的工厂模式,子类仅仅对工厂耦合,而不和具体实现耦合。,3,、,IoC,容器,子类不需要知道任何具体的实现,仅仅是机械化的工作。至于使用什么具体的实现,则由配置文件决定,所有对象都交由容器管理,实现了动态的拆装组建和组件重用。,7,、依赖对象的注入,1,、属性注入,注入类型:值类型、引用类型、内联类型,例:,2,、构造函数注入,构造函数注入使用,constructor-,arg,标签,可使用,value,和,ref,注入属性。,例:,8,、集合类型的注入,1,、,IList,类型,标签名:,list,element-type,属性:表示泛型,T,的类型,value,子标签:注入集合中元素的值,ref,子标签:注入集合中元素关联的对象,2,、,IDictionary,类型,标签名:,dictionary,key-type,和,value-type,属性:表示泛型,IDictionary,entry,子标签:表示,IDictionary,集合的元素,key,属性:元素的键,value,属性:元素的值,value-ref,属性:元素值所关联的对象,注:集合为空时,用,元素表示,9,、打造一个简易的依赖注入框架,比较,“,简易的,IoC,框架,”,,实现了带构造函数对象的实例和属性注入。,大家可以通过本案例,学习反射获取类的构造函数及参数、属性和属性的类型,以及创建类的实例和给属性赋值。,10,、方法注入,解决对象生命周期不同,可能产生的问题。,1,、查询方法注入,容器可以,动态覆盖,对象的,抽象或虚方法,,并在容器内查找已命名的对象;开发时可以不用实现抽象方法,通过配置文件动态切换组件。,使用,lookup-method,节点进行配置,例:,2,、替换任意方法,具体作用我也不是太清楚,大家自己研究吧。,例:,3,、事件注入,在,listener,节点处配置,even,t,和,method,属性指明事件名和绑定的方法,并增加,ref,节点设置,object,属性来指明调用哪个,IoC,容器对象。,例:,11,、自定义对象行为,1,、生命周期接口,1.1,初始化,继承,Spring.Objects.Factory.IInitializingObject,接口或配置,init-method,属性,1.2,销毁,继承,System.IDisposable,接口或配置,destroy-method,属性,例:,2,、抽象对象和子对象定义,设置,parent,属性来指明继承关系,,不是真正的继承,。,仅仅从父对象定义中,继承配置数据,,减少键入工作。,例:,第二阶段:面向切面编程,AOP,12,、面向切面编程,13,、,AOP,概念,14,、,AOP,的通知类型,15,、,AOP,的配置,12,、面向切面编程,AOP,即面向切面编程,通过预编译方式和,运行期动态代理,实现给程序统一添加功能的技术;它将程序分解为一系列,方面,(aspects),和,关注点,(concerns),,通过分离应用的,业务逻辑,和,系统级服务,进行内聚性的开发;应用对象只关心业务逻辑的实现,而不负责其它系统级关注点,如日志、事务支持等。,3,中实现方式比较:,1,、直接调用,耦合性太强,2,、代理模式,解除了耦合性,但增加了代码量,实现较麻烦。,3,、容器,AOP,实际是利用,System.Reflection.Emit,命名空间下的类中,运行时动态创建,IL,代码,来实现,AOP,代理;使得代理非常高效,实现简单。,13,、,AOP,概念,思考点:要对哪些方法拦截,拦截后又要做哪些处理?,基础术语:,Aspect(,切面,),:横切性关注点的抽象即为切面,程序里的切面就是对,IMethodInterceptor,接口的实现部分;,joinpoint,(,连接点,),:由于,Spring.Net,仅支持方法连接点,程序里的连接点就是要拦截的方法;,Pointcut,(,切入点,),:指要对哪些连接点进行拦截的定义,程序可以通过,IMethodInvocation,接口的,Method,来判断拦截哪些方法;,Advice(,通知,),:指拦截到连接点后所要做的事情,分为:前置通知、后置通知、异常通知、环绕通知;,Target(,目标对象,),:要代理的目标对象;,AOP,代理:有,AOP,框架在将通知应用于目标对象后创建,程序里通过,GetProxy,(),方法创建出代理对象;,Weave(,织入,),:指将切面应用到目标对象并导致代理对象被创建的过程;,Introduction(,引入,),:指在不修改代码的前提下,在运行期为类动态的添加一些方法和字段。,14,、,AOP,的通知类型,共享:基于类的通知,(per-class),独占:基于实例的通知,(per-instance),1,、环绕通知:通过,Proceed,方法的调用,依次调用拦截器链上的其它拦截器。,2,、前置通知:在,Proceed,方法调用前的通知。,3,、后置通知:在,Proceed,方法调用后的通知;如果通知抛出异常,就会沿拦截器链向上抛出,从而中断拦截器链的继续执行。,4,、异常通知:在,Proceed,方法调用发生异常的通知,15,、,AOP,的配置,ProxyFactoryObject,显示创建,AOP,代理方法会造成配置文件庞大,,Spring.Net,提供了,自动代理,功能,可根据条件自动创建代理对象。,1,、对象名称切入点:通过,ObjectNameAutoProxyCreator,类使用特定的文本值或通配符匹配,目标对象的名称,,进行代理对象的创建;如果同时要进行,方法的筛选,,可使用,NameMatchMethodPointcutAdvisor,类型。,2,、正则表达式切入点:通过,RegularExpressionMethodPointcutAdvisor,和,SdkRegularExpressionMethodPointcut,类在类级上自动进行代理对象的创建,而不用包含特定的对象名,避免了配置文件的臃肿。,3,、属性切入点:通过,AttributeMatchMethodPointcutAdvisor,类拦截标注带有特定属性的类中的方法。,第三阶段:事务和集成,16,、事务管理,17,、事务传播行为,18,、集成,IBatis.Net,19,、集成,ASP.NET MVC,16,、事务管理,ProxyFactoryObject,显示创建,AOP,代理方法会造成配置文件庞大,,Spring.Net,提供了,自动代理,功能,可根据条件自动创建代理对象。,1,、对象名称切入点:通过,ObjectNameAutoProxyCreator,类使用特定的文本值或通配符匹配,目标对象的名称,,进行代理对象的创建;如果同时要进行,方法的筛选,,可使用,NameMatchMethodPointcutAdvisor,类型。,2,、正则表达式切入点:通过,RegularExpressionMethodPointcutAdvisor,和,SdkRegularExpressionMethodPointcut,类在类级上自动进行代理对象的创建,而不用包含特定的对象名,避免了配置文件的臃肿。,3,、属性切入点:通过,AttributeMatchMethodPointcutAdvisor,类拦截标注带有特定属性的类中的方法。,17,、事务传播行为,通过,TransactionProxyFactoryObject,使用声明式事务。,7,种类型的事务传播行为:,PROPAGATION_REQUIRED,支持当前事务,如果当前没有事务,就新建一个事务。,这是最常见的选择。,PROPAGATION_SUPPORTS,支持当前事务,如果当前没有事务,就以非事务方式执行。,PROPAGATION_MANDATORY,支持当前事务,如果当前没有事务,就抛出异常。,PROPAGATION_REQUIRES_NEW,新建事务,如果当前存在事务,把当前事务挂起。,PROPAGATION_NOT_SUPPORTED,以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。,PROPAGATION_NEVER,以非事务方式执行,如果当前存在事务,则抛出异常。,PROPAGATION_NESTED,如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与,PROPAGATION_REQUIRED,类似的操作。,18,、集成,IBatis.Net,主要目的是为了说明这两个框架之间如何进行集成,(,IoC,),,范例省略了接口的定义,也未实现,AOP,的支持。,具体实现见范例,Step18,。,19,、集成,ASP.NET MVC,ASP.NET MVC Framework,是微软官方提供的,MVC,模式编写,ASP.NET Web,应用程序的一个框架,今天带给大家的就是,ASP.NET MVC,和,Sprint.Net,的组合。,具体实现见范例,Step19,。,第四阶段:扩展集成,20,、整合,WebService,21,、整合,WCF,22,、整合,Quartz.Net,23,、整合,NVelocity,20,、整合,WebService,虽然目前,.NET,对,WebService,支持得非常好,,Spring.Net,认为还是有几个方面可以改进:,1,、,.NET,在,.,asmx,文件中保存,WebService,请求和服务对象的关联关系,这些,.,asmx,文件不管有用没用都得放在那儿。,2,、,Spring.Net,希望能通过,IoC,容器对,WebService,进行依赖注入。一般说来,WebService,总会依赖其它服务对象,如果能用配置方式来选择服务对象,这个功能就相当强大了。,3,、目前在,.NET,中,WebService,的创建完全是一个实现,(,特定类型,),的过程。多数服务,(,虽不能说是全部,),都应实现为使用粗粒度服务接口的普通类型,并且,对象能否发布为远程对象、还是企业,(COM+),组件应该只与配置有关,而不应该取决于它的实现方式。,在客户端,,.NET,是将客户端代码绑定在了,代理类,而非服务接口上,在,Sprint.Net,的支持下,可以很方便的为,WebService,创建实现了指定服务接口的客户端代理 。,具体实现见范例,Step20,。,21,、整合,WCF,Spring.Net,对,WCF(Windows,Communication Foundation),有很好的支持,,Spring.Services(3.0,及以上的,dll,哈,),程序集下封装了创建和调用,WCF,的方法。以往我们使用,svc,文件来承载,WCF,,同自动生产的代理来调用服务,这样产生了诸多依赖。而使用,Spring.Net,则会令应用程序得到良好的改善。,由于时间的关系,本次只提供了控制台程序作为,WCF,宿主的范例。,具体实现见范例,Step21,。,22,、整合,Quartz.Net,Quartz.Net,是一个开源的,作业调度框架,,可用于,WinForm,和,ASP.NET,应用中。它提供了巨大的灵活性而不牺牲简单性,能够用它来为执行一个作业而创建简单的或复杂的调度,允许开发人员根据时间间隔(或天)来调度作业,实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了,Quartz.Net,的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。,关于,Quartz.Net,如何使用,Trigger,,,Job,和,JobDetail,对象的组合来实现工作调度,可以参考博客:, engine,),它允许仅仅简单的使用模板语言(,template language,)来引用由,.NET,代码定义的对象;当,NVelocity,应用于,web,开发时,界面设计人员可以和,.NET,程序开发人员同步开发一个遵循,MVC,架构的,web,站点,也就是说,页面设计人员可以只关注页面的显示效果,而由,.NET,程序开发人员关注业务逻辑编码 。,具体实现见范例,Step23,。,结束语,非常感谢大家抽出时间参加本次的培训!,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!