动态代理

代理有很多,据说是5种,但常用的只是jdk 的动态代理和CGLIB代理
jdk的代理分为静态代理和动态代理,静态代理用的很少,一般都是动态代理,
CGLIB代理是生成的目标类的子类,所以类和方法不能声明为final的,要不然就会有问题
jdk的代理是必须要实现接口的,而CGLIB不是,但必须要引入jar包,spring中默认使用jdk 的动态代理(实现接口了),除强制设置CGLIB的代理






cglib代理和jdk动态代理
1 如果目标对象实现了接口,默认情况下会使用jdk的动态代理实现AOP
2 如果目标对象实现了接口、可以强制使用cglib实现aop
  加入 cglib-nodep.jar
  加入 <aop:aspectj-autoproxy proxy-target-class="true"/>强制使用cglib
3 如果目标对象没有实现了接口,必须采用cglib库,spring会在jdk动态代理和cglib之间转换




jdk动态代理和cglib动态代理(字节码生成)区别
* jdk动态代理只能对实现了接口的类生成代理,而不能针对没有实现接口的类代理
* cglib是针对类实现代理、主要是对指定的类生成一个子类,覆盖了其中的方法
因为是继承。所以该类或方法最好不要声明成final,导致无法继承父类生成代理类






比如一个系统的日志记录功能,每个业务逻辑层的方法最后都要调用LogManager类的方法来记录日志,这样很麻烦,且LogManger有变化,所有逻辑层方法代码都要变


AOP的思想就是把LogManager的代码从每个业务逻辑层的方法中抽取出来,通过JDK类反射机制使每个业务逻辑层方法执行前或者执行后调用LogManger的方法记录日志
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值