为了账号安全,请及时绑定邮箱和手机立即绑定

Spring-AOP

标签:
Java

增强时机

代理类

try{
    before(前置增强)
    被增强的方法;(环绕增强针对方法内部)
    after-returning(后置增强)
} catch(Exception e){
    after-throwing(异常增强)
} finally{
    after(最终增强)
}

环绕增强

1. 方法必须用Object作为返回值
2. 方法第一个参数为ProceedingJoinPoint
public Object aroundAdvice(ProceedingJoinPoint pj) throws Throwable {
    //获得方法的参数
    Object[] args = pj.getArgs();
    //根据参数做一些处理
    System.out.println("HelloAspect.aroundAdvice");
    //调用实际的方法
    pj.proceed();
    return null;
}

xml配置文件

切点pointcut:在哪些包-->哪些类-->哪些方法
连接点(在方法的哪些位置上):before,after-returning,after-throwing,after
用哪些方法增强:"beforAdvice","afterAdvice","throwExceptionAdvice","finallyAdvice"
一个切面包含上述三点
<bean id="aspect" class="com.xxx.testaop.HelloAspect"/>
<aop:config>
    <aop:pointcut id="pointcut" expression="execution(* com.xxx.testaop.*.*(..))"/>
    <aop:aspect ref="aspect">
        <aop:before method="beforAdvice" pointcut-ref="pointcut"/>
        <aop:after-returning method="afterAdvice" pointcut-ref="pointcut"/>
        <aop:after-throwing method="throwExceptionAdvice" pointcut-ref="pointcut"/>
        <aop:after method="finallyAdvice" pointcut-ref="pointcut"/>
        <aop:around method="aroundAdvice" pointcut-ref="pointcut"/>
    </aop:aspect>
</aop:config>

增强实现类

public class HelloAspect {
    public void beforAdvice(){
        System.out.println("HelloAspect.beforAdvice");
    }

    public void afterAdvice(){
        System.out.println("HelloAspect.afterAdvice");
    }

    public void throwExceptionAdvice(){
        System.out.println("HelloAspect.throwExceptionAdvice");
    }

    public void finallyAdvice(){
        System.out.println("HelloAspect.finallyAdvice");
    }

    public Object aroundAdvice(ProceedingJoinPoint pj) throws Throwable {
        Object[] args = pj.getArgs();
        System.out.println(pj.getKind());
        System.out.println(pj.getThis());
        pj.proceed();
        System.out.println("HelloAspect.aroundAdvice");
        return null;
    }
}
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1
获赞与收藏
31

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消