




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Spring.Net框架技术,2012-2-13 引用资料:,什么是Spring.Net?,Spring.Net是一个轻量级的控制反转(IoC)和面向切面编程(AOP)技术的容器框架。 下图展示了各种类型的核心模块:,第一阶段:控制反转与依赖注入,1、控制反转(IoC) 2、环境搭建 3、实现一个简易的Ioc框架 4、对象的创建 5、容器中对象的作用域 6、依赖注入(DI) 7、依赖对象的注入 8、集合类型的注入 9、打造一个简易的依赖注入框架 10、方法注入 11、自定义对象行为,1、控制反转(IoC),控制反转(Inversion of Control,英文缩写为IoC),也叫依赖注入(D
2、ependency Injection)。控制反转的意思是依赖对象(控制权)发生转变,由最初的类本身来管理依赖对象转变为IoC框架来管理这些对象,使得依赖脱离类本身的控制,从而实现松耦合。 3种实现方式比较: 1、一般方法:对象间直接耦合; 2、工厂方法:对象间通过工厂耦合; 3、IoC方法:把耦合放入XML文件,通过容器这需要的时候把这个依赖关系形成;可以看成是工厂模式的升华。,2、环境搭建,1、常用dll(注意dll的版本区分) Common.Logging.dll(必需) Spring.Core.dll(必需) Spring.AOP.dll 2、配置文件的读取方式 实际物理路径: IRe
3、source 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、,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、泛型类型的创建
5、泛型类型可采用上面3中任一方式创建,只是type属性的设置需注意:左尖括号- , SprintTest /,5、容器中对象的作用域(1),1、容器对象的部署(2种) 1.1 singleton(框架默认) 容器中只会有一个共享的实例,该对象只会被创建一次。 例: 1.2 非singleton 每次请求,容器都会创建一个新的实例;当脱离调用方法的作用域后,该对象会被容器自动销毁。 例:,5、容器中对象的作用域(2),2、实例化延迟(lazy-init) 作用:当容器初始化时进行对象实例化(框架默认),还是在调用GetObject方法时才进行对象实例化。 例: 注:设置为lazy-init=tru
6、e时应用程序启动会快一点,但在启动的时不能够检测错误,如果在调用的时候一旦发生错误,后果是不堪设想的;需要在搭建应用时考虑。,6、依赖注入(DI),IoC容器的一种用途就是解耦合,其中最经典的就是:依赖注入(Dependeny Injection)简称DI,目前DI是最优秀的解耦方式之一。 1、里氏替换原则(LSP) LSP:子类必须能够替换掉它们的基类。 缺点:但在子类的实现中还是会存在一些耦合。 2、经典的工厂模式 子类仅仅对工厂耦合,而不和具体实现耦合。 3、IoC容器 子类不需要知道任何具体的实现,仅仅是机械化的工作。至于使用什么具体的实现,则由配置文件决定,所有对象都交由容器管理,实
7、现了动态的拆装组建和组件重用。,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集合的
8、元素 key 属性:元素的键 value 属性:元素的值 value-ref属性:元素值所关联的对象 注:集合为空时,用元素表示,9、打造一个简易的依赖注入框架,比较“简易的IoC框架”,实现了带构造函数对象的实例和属性注入。 大家可以通过本案例,学习反射获取类的构造函数及参数、属性和属性的类型,以及创建类的实例和给属性赋值。,10、方法注入,解决对象生命周期不同,可能产生的问题。 1、查询方法注入 容器可以动态覆盖对象的抽象或虚方法,并在容器内查找已命名的对象;开发时可以不用实现抽象方法,通过配置文件动态切换组件。 使用lookup-method节点进行配置 例: 2、替换任意方法 具体作用
9、我也不是太清楚,大家自己研究吧。 例: 3、事件注入 在listener节点处配置event和method属性指明事件名和绑定的方法,并增加ref节点设置object属性来指明调用哪个IoC容器对象。 例: ,11、自定义对象行为,1、生命周期接口 1.1 初始化 继承Spring.Objects.Factory.IInitializingObject接口或配置init-method属性 1.2 销毁 继承System.IDisposable接口或配置destroy-method属性 例: 2、抽象对象和子对象定义 设置parent属性来指明继承关系,不是真正的继承。 仅仅从父对象定义中继承配
10、置数据,减少键入工作。 例: ,第二阶段:面向切面编程AOP,12、面向切面编程 13、AOP概念 14、AOP的通知类型 15、AOP的配置,12、面向切面编程,AOP即面向切面编程,通过预编译方式和运行期动态代理实现给程序统一添加功能的技术;它将程序分解为一系列方面(aspects)和关注点(concerns),通过分离应用的业务逻辑和系统级服务进行内聚性的开发;应用对象只关心业务逻辑的实现,而不负责其它系统级关注点,如日志、事务支持等。 3中实现方式比较: 1、直接调用 耦合性太强 2、代理模式 解除了耦合性,但增加了代码量,实现较麻烦。 3、容器AOP 实际是利用System.Refl
11、ection.Emit命名空间下的类中运行时动态创建IL代码来实现AOP代理;使得代理非常高效,实现简单。,13、AOP概念,思考点:要对哪些方法拦截,拦截后又要做哪些处理? 基础术语: Aspect(切面):横切性关注点的抽象即为切面,程序里的切面就是对IMethodInterceptor接口的实现部分; joinpoint(连接点):由于Spring.Net仅支持方法连接点,程序里的连接点就是要拦截的方法; Pointcut(切入点):指要对哪些连接点进行拦截的定义,程序可以通过IMethodInvocation接口的Method来判断拦截哪些方法; Advice(通知):指拦截到连接点后
12、所要做的事情,分为:前置通知、后置通知、异常通知、环绕通知; Target(目标对象):要代理的目标对象; AOP代理:有AOP框架在将通知应用于目标对象后创建,程序里通过GetProxy()方法创建出代理对象; Weave(织入):指将切面应用到目标对象并导致代理对象被创建的过程; Introduction(引入):指在不修改代码的前提下,在运行期为类动态的添加一些方法和字段。,14、AOP的通知类型,共享:基于类的通知(per-class) 独占:基于实例的通知(per-instance) 1、环绕通知:通过Proceed方法的调用,依次调用拦截器链上的其它拦截器。 2、前置通知:在Pro
13、ceed方法调用前的通知。 3、后置通知:在Proceed方法调用后的通知;如果通知抛出异常,就会沿拦截器链向上抛出,从而中断拦截器链的继续执行。 4、异常通知:在Proceed方法调用发生异常的通知,15、AOP的配置,ProxyFactoryObject显示创建AOP代理方法会造成配置文件庞大,Spring.Net提供了自动代理功能,可根据条件自动创建代理对象。 1、对象名称切入点:通过ObjectNameAutoProxyCreator类使用特定的文本值或通配符匹配目标对象的名称,进行代理对象的创建;如果同时要进行方法的筛选,可使用NameMatchMethodPointcutAdvis
14、or类型。 2、正则表达式切入点:通过RegularExpressionMethodPointcutAdvisor和SdkRegularExpressionMethodPointcut类在类级上自动进行代理对象的创建,而不用包含特定的对象名,避免了配置文件的臃肿。 3、属性切入点:通过AttributeMatchMethodPointcutAdvisor类拦截标注带有特定属性的类中的方法。,第三阶段:事务和集成,16、事务管理 17、事务传播行为 18、集成IBatis.Net 19、集成ASP.NET MVC,16、事务管理,ProxyFactoryObject显示创建AOP代理方法会造成配
15、置文件庞大,Spring.Net提供了自动代理功能,可根据条件自动创建代理对象。 1、对象名称切入点:通过ObjectNameAutoProxyCreator类使用特定的文本值或通配符匹配目标对象的名称,进行代理对象的创建;如果同时要进行方法的筛选,可使用NameMatchMethodPointcutAdvisor类型。 2、正则表达式切入点:通过RegularExpressionMethodPointcutAdvisor和SdkRegularExpressionMethodPointcut类在类级上自动进行代理对象的创建,而不用包含特定的对象名,避免了配置文件的臃肿。 3、属性切入点:通过A
16、ttributeMatchMethodPointcutAdvisor类拦截标注带有特定属性的类中的方法。,17、事务传播行为,通过TransactionProxyFactoryObject使用声明式事务。 7种类型的事务传播行为:,18、集成IBatis.Net,主要目的是为了说明这两个框架之间如何进行集成(IoC),范例省略了接口的定义,也未实现AOP的支持。 具体实现见范例Step18。,19、集成ASP.NET MVC,ASP.NET MVC Framework是微软官方提供的MVC模式编写ASP.NET Web应用程序的一个框架,今天带给大家的就是ASP.NET MVC和Sprint.
17、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总会依赖其它服务对象,如果能用配置方式来选择服务对象,
18、这个功能就相当强大了。 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,同自动生产的代理来调用服务,这样产生了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 论词汇衔接在语篇教学中的运用
- 小熊的奇幻森林冒险童话作文(4篇)
- 某超市成果宣传规定
- 穿越星空之旅想象作文(7篇)
- 超市与生鲜电商平台合作备忘录
- 奇思妙想:如果我是一朵云作文12篇范文
- 2025年采购师(高级)考试试卷:采购团队管理与供应链协同效应试题
- 2025年电子商务师(高级)考试试卷:电子商务平台数据分析实战
- 2025年地区公务员证监会计类专业试卷:会计信息系统与审计技术试题
- 全职员工在职表现及信息证明(7篇)
- 生物传感器课件
- 护理三基知识试题与答案
- 陕西省机关事业单位工人技术等级考核农艺工题库
- 湖北省襄阳市樊城区2022-2023学年数学六下期末检测试题含解析
- 周围性面瘫-医学课件
- 2023年春季国开《学前教育科研方法》期末大作业(参考答案)
- 2023四川安全员《B证》考试题库
- EXCELVBA函数参考手册
- 雨污分流工程安全文明施工方案优质资料
- SB/T 10279-2017熏煮香肠
- SYB第一步:把自己作为创业者来评价课件
评论
0/150
提交评论