IOC
一.IOC概述:
一般指控制反转(inversion of Control),把创建对象的权利交给框架,Ioc容器控制对象,是框架的重要特征,并非是面向对象编程的专用术语。它包括依赖注入(DI)和依赖查找。是一种全新的设计模式,可以把它看做是工厂模式的升华,作为一个大工厂,这里面要生成的对象都是在xml文件中给出定义的,然后利用java的'反射(就是根据给出的类名来生成对象)'编程,根据xml中给出的类名生成相应对象。
二.Ioc优缺点:
1).优点:
*灵活性。为广泛使用的接口更改实现类比较简单,更改给定的类检索策略,添加拦截器可以在同一地方完成;
*可读性。代码更简洁,并且没有依赖项查找代码不会被打乱;
*可测试性。测试越多,代码质量越好,偶合越低,内聚越高。
2).缺点:
*生成一个对象的步骤变复杂了;
*对象生成因为是使用反射编程,在效率上有些损耗;
*缺少IDE重构操作的支持;
*IOC框架产品本身的成熟度需要进行评估,如果引入一个不成熟的IOC框架产品,那么会影响到整个项目,所以这也是一个隐性的风险。
三.IoC容器的部分产品:
*轻量级:Spring、Guice、Pico Container、Avalon、HiveMind;
*重量级:EJB;
*半轻半重:JBoss、Jdon等。
四.实现策略:
*依赖查找。容器提供回调接口和上下文条件给组件。组件就必须使用容器提供的API来查找资源和协作对象,仅有的控制反转只体现在回调方法上,容器将调用这些回调方法,从而让应用代码获得相关资源。
*依赖注入。组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。容器全权负责的组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。通过JavaBean属性注射依赖关系的做法称为设值方法注入。将依赖关系作为构造函数参数传入的做法称为构造器注入。
AOP
一.AOP概述:
意为“面向切面编程”,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。是OOP(面向对象编程)的延续,是函数式编程的一种衍生范性。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。把重复代码抽取出来,在需要执行时,使用动态代理技术,在不修改源码的基础上,对我们已有的方法增强。
二.AOP主要功能:
*日志记录;
*性能统计;
*安全控制;
*异常处理
三.AOP优势:
*减少重复代码;
*提高开发效率;
*维护方便;
*降低模块之间的耦合度;
*在程序运行期间,不修改源码对已有方法进行增强。
四.AOP相关术语:
*Joinpoint(连接点):指那些被拦截的点。在spring中所指方法,因为spring只支持方法类型的连接点;
*Pointcut(切入点):对连接点进行拦截的定义;
*Advice(通知/增强):指被拦截到连接点之后要执行的代码,分为前置、后置、环绕、异常、最终通知;
*Introduction(引介):在不修改类代码的前提下,引介可以在运行期为类动态的添加一些方法和字段;
*Target(目标对象):代理的目标对象;
*织入(weave):将切面应用到目标对象并导致代理对象创建的过程,spring 采用动态代理织入,而 AspectJ 采用编译期织入和类装载期织入;
*Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类;
*Aspect(切面):是切入点和通知(引介)的结合;
*横切关注点:对哪些方法进行拦截,拦截后怎么处理。