SpringNet框架技术PPT文档格式.ppt
《SpringNet框架技术PPT文档格式.ppt》由会员分享,可在线阅读,更多相关《SpringNet框架技术PPT文档格式.ppt(32页珍藏版)》请在冰豆网上搜索。
3、IoC方法:
把耦合放入XML文件,通过容器这需要的时候把这个依赖关系形成;
可以看成是工厂模式的升华。
2、环境搭建,1、常用dll(注意dll的版本区分)Common.Logging.dll(必需)Spring.Core.dll(必需)Spring.AOP.dll2、配置文件的读取方式实际物理路径:
IResourceinput=newFileSystemResource(D:
Objects.xml);
IObjectFactoryfactory=newXmlObjectFactory(input);
程序集下读取文件:
stringxmlFiles=newstringfile:
/文件名,assembly:
/程序集名/命名空名/文件名,;
IApplicationContextcontext=newXmlApplicationContext(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属性的设置需注意:
左尖括号-,SprintTest/,5、容器中对象的作用域
(1),1、容器对象的部署(2种)1.1singleton(框架默认)容器中只会有一个共享的实例,该对象只会被创建一次。
例:
1.2非singleton每次请求,容器都会创建一个新的实例;
当脱离调用方法的作用域后,该对象会被容器自动销毁。
5、容器中对象的作用域
(2),2、实例化延迟(lazy-init)作用:
当容器初始化时进行对象实例化(框架默认),还是在调用GetObject方法时才进行对象实例化。
注:
设置为lazy-init=true时应用程序启动会快一点,但在启动的时不能够检测错误,如果在调用的时候一旦发生错误,后果是不堪设想的;
需要在搭建应用时考虑。
6、依赖注入(DI),IoC容器的一种用途就是解耦合,其中最经典的就是:
依赖注入(DependenyInjection)简称DI,目前DI是最优秀的解耦方式之一。
1、里氏替换原则(LSP)LSP:
子类必须能够替换掉它们的基类。
缺点:
但在子类的实现中还是会存在一些耦合。
2、经典的工厂模式子类仅仅对工厂耦合,而不和具体实现耦合。
3、IoC容器子类不需要知道任何具体的实现,仅仅是机械化的工作。
至于使用什么具体的实现,则由配置文件决定,所有对象都交由容器管理,实现了动态的拆装组建和组件重用。
7、依赖对象的注入,1、属性注入注入类型:
值类型、引用类型、内联类型例:
2、构造函数注入构造函数注入使用constructor-arg标签,可使用value和ref注入属性。
8、集合类型的注入,1、IList类型标签名:
listelement-type属性:
表示泛型T的类型value子标签:
注入集合中元素的值ref子标签:
注入集合中元素关联的对象2、IDictionary类型标签名:
dictionarykey-type和value-type属性:
表示泛型IDictionaryentry子标签:
表示IDictionary集合的元素key属性:
元素的键value属性:
元素的值value-ref属性:
元素值所关联的对象注:
集合为空时,用元素表示,9、打造一个简易的依赖注入框架,比较“简易的IoC框架”,实现了带构造函数对象的实例和属性注入。
大家可以通过本案例,学习反射获取类的构造函数及参数、属性和属性的类型,以及创建类的实例和给属性赋值。
10、方法注入,解决对象生命周期不同,可能产生的问题。
1、查询方法注入容器可以动态覆盖对象的抽象或虚方法,并在容器内查找已命名的对象;
开发时可以不用实现抽象方法,通过配置文件动态切换组件。
使用lookup-method节点进行配置例:
2、替换任意方法具体作用我也不是太清楚,大家自己研究吧。
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属性来指明继承关系,不是真正的继承。
仅仅从父对象定义中继承配置数据,减少键入工作。
第二阶段:
面向切面编程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.Net19、集成ASP.NETMVC,16、事务管理,ProxyFactoryObject显示创建AOP代理方法会造成配置文件庞大,Spring.Net提供了自动代理功能,可根据条件自动创建代理对象。
17、事务传播行为,通过TransactionProxyFactoryObject使用声明式事务。
7种类型的事务传播行为:
18、集成IBatis.Net,主要目的是为了说明这两个框架之间如何进行集成(IoC),范例省略了接口的定义,也未实现AOP的支持。
具体实现见范例Step18。
19、集成ASP.NETMVC,ASP.NETMVCFramework是微软官方提供的MVC模式编写ASP.NETWeb应用程序的一个框架,今天带给大家的就是ASP.NETMVC和Sprint.Net的组合。
具体实现见范例Step19。
第四阶段:
扩展集成,20、整合WebService21、整合WCF22、整合Quartz.Net23、整合NVelocity,20、整合WebService,虽然目前.NET对WebService支持得非常好,Spring.Net认为还是有几个方面可以改进:
1、.NET在.asmx文件中保存WebService请求和服务对象的关联关系,这些.asmx文件不管有用没用都得放在那儿。
2、Spring.Net希望能通过IoC容器对WebService进行依赖注入。
一般说来WebService总会依赖其它服务对象,如果能用配置方式来选择服务对象,这个功能就相当