一尘不染

在Spring AOP中使用代理

spring

我正在读一本书,其中谈到在Spring AOP中启用AspectJ支持。

以下是从书中摘录的一段:

要在Spring IoC容器中启用AspectJ注释支持,只需在bean配置文件中定义一个空的XML元素aop:aspectj-autoproxy。然后,Spring将为与AspectJ方面匹配的任何bean自动创建代理。

对于在应用程序设计中不可用或未使用接口的情况,可以依靠CGLIB创建代理。为了使CGLIB,你需要设置该属性proxy-target-class=true<aop:aspectj-autoproxy />

我无法得到第二段。什么是“ 接口不可用 ”。谁能用一个例子说明这一点?


阅读 431

收藏
2020-04-14

共1个答案

一尘不染

Spring AOP使用JDK动态代理或CGLIB为目标对象创建代理。

根据Spring文档,如果你的目标实现了至少一个接口,则将使用JDK动态代理。但是,如果目标对象未实现任何接口,则将创建CGLIB代理。

这样可以强制创建CGLIB代理(设置proxy-target-class =“ true ”):

 <aop:config proxy-target-class="true">
    <!-- other beans defined here... -->
 </aop:config>

使用AspectJ及其自动支持时,你也可以强制使用CGLIB代理。这是使用的地方,<aop:aspectj-autoproxy>这里的“ proxy-target-class”也必须设置为true:

<aop:aspectj-autoproxy proxy-target-class="true"/>

2020-04-14