SpringAOP - 代理的实现方式

本文详细介绍了静态代理与动态代理的区别,并重点探讨了Spring AOP中的动态代理实现方式,包括JDK动态代理和Cglib动态代理的使用场景及限制条件。

静态代理:在代理类中持有一个目标类的引用,然后对目标类的方法进行代理
缺点很明显,受限于方法的数量;

动态代理:基于反射实现,比较易用
有两种实现:
1.基于接口的代理,代表为JDK实现的动态代理
类 java.lang.reflect.Proxy
接口 InvocationHandler

2.基于继承的代理,代表为Cglib实现的动态代理
无法对static和final类进行代理
无法对private和static方法进行代理


Spring AOP的选择顺序:
1.若目标对象实现了接口,则默认使用JDK动态代理
2.若目标对象没有实现接口,则采用Cglib进行动态代理
3.如果目标对象实现了接口,且强制Cglib代理,则使用Cglib进行动态代理
在目标类上使用注解 @EnableAspectAutoProxy(proxyTrgetClass=true) 则是强制Cglib代理

使用Spring AOP 的注意事项
1.不宜将重要的业务逻辑放到aop中处理
2.无法拦截static、private、final方法
3.无法拦截内部方法调用

转载于:https://my.oschina.net/mengzhang6/blog/1556196

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值