我正在读一本书,其中谈到启用AspectJSpring AOP 的支持。
下面是书中的一段话:
要在 Spring IoC 容器中启用 AspectJ 注释支持,您只需定义一个空的
bean 配置文件中的 XML 元素 aop:aspectj-autoproxy。然后Spring会自动
为与 AspectJ 方面匹配的任何 bean 创建代理。
对于接口不可用或未在应用程序设计中使用的情况,可以
依赖CGLIB创建代理。要启用CGLIB,需要设置属性proxy-target-class=true
in <aop:aspectj-autoproxy />
.
我无法理解第二段。 '是什么意思接口不可用'。谁能用一个例子来说明这一点?
Spring AOP 使用 JDK 动态代理或 CGLIB 来为目标对象创建代理。
根据 Spring 文档,如果您的目标至少实现一个接口,则将使用 JDK 动态代理。但是,如果您的目标对象未实现任何接口,则会创建 CGLIB 代理。
这是强制创建 CGLIB 代理的方法(set proxy-target-class="true"):
<aop:config proxy-target-class="true">
<!-- other beans defined here... -->
</aop:config>
当使用 AspectJ 及其 autopoxy 支持时,您还可以强制使用 CGLIB 代理。这就是<aop:aspectj-autoproxy>
使用,这里“proxy-target-class”也必须设置为true:
<aop:aspectj-autoproxy proxy-target-class="true"/>
请参阅代理机制部分使用 Spring 进行面向方面编程 http://static.springsource.org/spring/docs/2.5.x/reference/aop.html#aop-proxying文档以获取更多详细信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)