IOC及AOP实现原理

IOC实现原理:http://blog.csdn.net/it_man/article/details/4402245

spring通过加载我们配置文件,将配置信息保存的Map里!!!!!key是bean id ,value是 这个对象!!!实例化一个类时,它通过反射调用类中set方法将事先保存在HashMap中的类属性注入到类中

IOC:由spring来负责控制对象的生命周期和对象间的关系,我们只需要关注业务对象即可,使用对象时直接注入即可。所有的类都会在spring容器中登记,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转

DI:系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过依赖注入

一般DI可以理解为IOC,DI其实就是IOC的另外一种说法

参考:https://www.ibm.com/developerworks/cn/java/j-lo-springaopcglib/

AOP:应用于处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等,关键就在于代理,静态代理和动态代理

  静态代理:在编译阶段就可生成 AOP 代理类

  动态代理:运行时借助于 JDK 动态代理、CGLIB 等在内存中“临时”生成 AOP 动态代理类

通知(Advice)的种类 : Before(前置通知)  AfterReturning(后置通知) AfterThrowing(异常通知) After(最终通知) Around(环绕通知)

AOP 专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点的问题,,只要定义方法,无需在业务中显示调用,系统会自动执行该特殊方法

AspectJ :编译时增强,静态代理

Spring AOP:运行时增强,动态代理

进行 AOP 编程的关键就是定义切入点和定义增强处理,需手动修改方法,只要定义切入点即可

代理对象的方法 = 增强处理 + 被代理对象的方法

 

CGLIB(Code Generation Library);可以在运行时候动态是生成某个类的子类。

Spring AOP 的根本所在:Spring AOP 动态选择使用JDK代理还是CGlib代理,代理类实现接口就用JDK,否则就用CGLIB 来动态地生成代理对象,这个代理对象就是所谓的 AOP 代理,

    而 AOP 代理的方法则通过在目标对象的切入点动态地织入增强处理,从而完成了对目标方法的增强。

CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM(Java字节码操控框架),

posted @ 2017-06-20 00:33  雪浪snowWave  阅读(308)  评论(0编辑  收藏  举报