AOP 代理 = 原来的业务类+增强处理。
这个生成AOP 代理由 Spring 的 IoC 容器负责生成。spring aop cglib也由 IoC 容器负责管理。因此,AOP 代理可以直接使用容器中的其他 Bean 实例作为目标,这种关系可由 IoC 容器的依赖注入提供。回顾Hello World的例子,其中程序员参与的只有 3 个部分:
. 定义普通业务组件。
. 定义切入点,一个切入点可能横切多个业务组件。
. 定义增强处理,增强处理就是在 AOP 框架为普通业务组件织入的处理动作。
CGLIB(Code Generation Library)它是一个代码生成类库。它可以在运行时候动态是生成某个类的子类。代理模式为要访问的目标对象提供了一种途径,当访问对象时,它引入了一个间接的层。JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创建代理。JDK的动态代理用起来非常简单,唯一限制便是使用动态代理的对象必须实现一个或多个接口。而CGLIB缺不必有此限制。要想Spring AOP 通过CGLIB生成代理,只需要在Spring 的配置文件引入
<aop:aspectj-autoproxy proxy-target-class="true"/>
CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM(Java字节码操控框架),来转换字节码并生成新的类。由于没有了解过class 文件和字节码,因而也就写不下去了。
也许学习下来最大的收获便是 弄清楚了 AspectJ 和 Spring AOP 在实现上几乎无关。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-24494-3.html
后一条慢慢来
让奥黑的国民知道失去亲人的滋味
说得好