您的位置:首页 > 编程语言 > Java开发

spring的AOP学习2——动态代理

2012-04-09 13:14 302 查看
Spring的动态代理有两种:JDK动态代理和CGLIB代理。spring优先使用JDK动态代理。

JDK动态代理:使用java.lang.reflect.Proxy动态代理实现,即提取目标对象的接口,然后对接口创建AOP代理。

CGLIB代理:CGLIB代理不仅能进行接口代理,也能进行类代理,在使用CGLIB代理时,需要注意以下几点:

1.不能通知final方法,因为final方法不能被覆盖(CGLIB通过生成子类来创建代理)

2. 会产生两次构造器调用,第一次是目标类的构造器调用,第二次是CGLIB生成的代理类的构造器调用。如果需要CGLIB代理方法,请确保两次构造器调用不影响应用。

对于Schema风格配置切面使用如下方式来指定使用CGLIB代理:

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

使用@AspectJ风格:

<aop:aspectj-autoproxy proxy-target-class="true"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: