Spring AOP

实现aop的方式有很多,这里仅对最后一种进行说明。

一、 JDK动态代理

jdk动态代理必须借助一个接口才能产生代理对象。因此,对于使用业务接口的类,spring默认使用jdk动态代理实现AOP。
创建的代理类实现InvocationHandler接口

二、CGLIB动态代理

CGLIB动态代理不需提供接口。因此,对于没有接口的类,使用CGLIB动态代理实现AOP。仅依赖Spring-Core包。
创建的代理类实现MethodInterceptor接口

三、基于代理类的AOP实现

四、基于XML配置开发AspectJ

和第五种一样,只不过一个是xml形式,一个是注解形式

五、基于注解开发AspectJ(推荐)

1,创建切面类。
自定义各种通知方法和切入点方法
各种方法上加相应注解,类上加相应注解。
2,配置文件:
启动基于注解的AspectJ支持

注:
无异常:环绕-前置-方法-后置返回-最终-环绕
有异常:环绕-前置-方法-异常-最终

注:编写环绕通知时,
1、ProceedingJoinPoint是JoinPoint的子接口,代表可以执行的目标方法
2、返回值的类型必须是Object
3、必须一个参数是类型ProceedingJoinPoint
4、必须throws Throwable

执行顺序是我亲自测的结果。网上及书籍上,执行顺序都不完全一样。有兴趣可以自测试试。如我有误,麻烦告诉我一下,谢谢。

注:引入通知(该通知可在目标类中增加一些新的方法和属性等操作)。
在切面类中加入下面代码。

/**
* aop.dao.*包下的所有实现类都添加了MaxCalculatorImpl类的方法。
* 如果用aop.dao.Calculator+表示Calculator接口的所有子类型(非Calculator本身)都添加了MaxCalculatorImpl类的方法。
* 如果用* *.PureCalculator(*空格*)表示PureCalculator类添加了MaxCalculatorImpl类的方法。
* 如果用aop.dao.PureCalculator表示PureCalculator类添加了MaxCalculatorImpl类的方法。
* 用* *.Calculator+也可,
*/
@DeclareParents(value = "* *.Calculator+", defaultImpl = MaxCalculatorImpl.class)
private MaxCalculator maxCalculator;

然后获得calculator的bean后,直接强转成MaxCalculator 类即可调用该类方法。

MaxCalculator calculator = (MaxCalculator) appCon.getBean(Calculator.class);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值