SpringAOP - 代理的实现方式

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

动态代理:基于反射实现,比较易用
有两种实现:
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.没法拦截内部方法调用接口

相关文章
相关标签/搜索