AOP-5-Spring对AOP的实现

Spring对AOP实现的模式分为2种,一种是代理,一种是AspectJ,这种区分方式是直接使用实现方式区分的。

一、Spring对动态代理的设计

动态代理我们都知道在Spring中分为JDK动态代理和cglib动态代理,JDK动态代理自不用说,由Java运行时环境提供,而对于cglib,Spring将他封装在了spring-core中,足以证明动态代理在Spring中处于一个基础+核心的地位,所以我们更加有必要搞清楚Spring是如何使用cglib的,而对于Spring AOP而言,则是单独的作为一个模块出现:spring-aop。

使用jdk动态代理,是通过生成一个实现了接口的代理类,代理类中包含原始类,被增强的方法不是直接写好了各种增强逻辑,而是通过Advisor列表组合好,依次调用。使用cglib动态代理,是通过生成一个继承目标类的代理类,代理类中包含原始类,被增强的方法也不是直接生成各种代理逻辑,同样是通过Advisor列表进行动态调用。

二、2种动态代理的特点

JDK动态代理需提供接口,代理类实现的是接口中的方法,如果无法提供目标对象的接口,无法完成代理。
cglib通过继承目标类,所以无法目标类为final时无法代理,目标类中方法为final或private时无法代理。
JDK通过反射实时生成代理对象,cglib通过操作字节码生成代理对象,cglib动态代理会较JDK动态代理快。

三、AOP联盟的标准

先来看看spring-aop包的结构:



其中aopalliance是对AOP和Java有浓厚兴趣的软件开发人员联合成立的开源项目,Spring是按照AOP联盟的规范做的实现,可见Spring是一个集众多基础框架于一身的伟大软件。aopalliance包里面只有接口,没有任何实现,这就是一个规范定义。

AOP联盟定义的顶级概念有:
org.aopalliance.aop.Advice
org.aopalliance.intercept.Joinpoint
aop联盟中定义分为aop包和intercept,我们可以从这里看出aop联盟对切面的理解。advice是切面的逻辑,是切面中最直观的一个概念,其他的都是为advice服务的。

 org.aopalliance.aop.Advice

顶级接口增强,建议,也就是要添加的代理逻辑所在位置,Advice处于设计的高层,他会使用Joinpoint
AOP联盟和Spring对Advice的设计如下,可以看出,对ConstructorInterceptor大家一点兴趣也没有,没有人对构造方法处理,BeforeAdvice和AfterAdvice的功能也可以被

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值