AOP是如何实现的?

Spring中的AOP代理还是离不开Spring的IOC容器,代理的生成,管理及其依赖关系都是由IOC容器负责;Spring默认使用JDK动态代理,在需要代理类而不是代理接口的时候,Spring会自动切换为使用CGLIB代理,不过现在的项目都是面向接口编程,所以JDK动态代理相对来说用的还是多一些。

JDK动态代理(默认使用):

代理类实现InvocationHandler接口,加上反射生成一个实现代理接口的匿名类,调用具体方法前调用该代理类来处理。

具体步骤:

通过@Aspect注解定义一个切面类:指定切点,通知,如果你是想使用的注解方式灵活切入,也需要指定切入的注解(注解需要自己定义)。

CGLIB动态代理:

利用ASM开源包,把代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

可以通过在pom中引用Cglib类库然后在spring配置文件中设置开启 来强制使用。

注意:

Spring会自动在JDK动态代理和CGLIB之间转换。

在jdk1.6前Cglib比JDK更快(因为ASM生成代理类比反射效率更高)

而之后JDK更快,比Cglib高了不止20%,Cglib明显跟不上了。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值