IOC及AOP实现原理
Posted 雪浪snowWave
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOC及AOP实现原理相关的知识,希望对你有一定的参考价值。
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 动态代理类
AOP 专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点的问题,,只要定义方法,无需在业务中显示调用,系统会自动执行该特殊方法
AspectJ :编译时增强,静态代理
Spring AOP:运行时增强,动态代理
进行 AOP 编程的关键就是定义切入点和定义增强处理,需手动修改方法,只要定义切入点即可
代理对象的方法 = 增强处理 + 被代理对象的方法
CGLIB(Code Generation Library);可以在运行时候动态是生成某个类的子类。
pring AOP 的根本所在:Spring AOP 就是通过 CGLIB 来动态地生成代理对象,这个代理对象就是所谓的 AOP 代理,
而 AOP 代理的方法则通过在目标对象的切入点动态地织入增强处理,从而完成了对目标方法的增强。
CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM(Java字节码操控框架),
以上是关于IOC及AOP实现原理的主要内容,如果未能解决你的问题,请参考以下文章