SpringBoot AOP综合例子

Posted hellohello

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot AOP综合例子相关的知识,希望对你有一定的参考价值。

完整源码:https://github.com/947133297/cgLibDemo

通过AOP来便捷地输出日志,能更加方便排查系统的bug,这个例子中简单输出自定义文件和函数执行时的参数,函数要不要输出日志,可以通过注解来控制。

两个服务类代码如下:

@Service
@EnableLogger
public class ServiceA {

    @LogBeforeExec("show方法执行前输出")
    public void show(int dataA, String dataB, boolean dataC){
        System.out.println("ServiceA show方法执行");
    }
}


@Service
public class ServiceB {
    public void show(int dataA, String dataB, boolean dataC){
        System.out.println("ServiceB show方法执行");
    }
}

服务类A中,添加了自定义注解来控制,代表需要输出日志,而服务类B没有添加注解,程序运行效果,不管通过单元测试还是控制器来执行服务代码,都会输出:

show方法执行前输出 - [[1, 2, false]]
ServiceA show方法执行
ServiceB show方法执行

实现原理:通过BeanPostProcessor加工bean,加工过程中通过cgLib织入AOP增强bean的功能。

拓展:因为spring应用中基本都是单例,AOP拦截中获取到的对象都会是同一个,所以可以通过map将被代理对象与某片内存数据关联起来,拦截方法之后,可以做一些方法缓存之类的功能。

 



以上是关于SpringBoot AOP综合例子的主要内容,如果未能解决你的问题,请参考以下文章

springboot中的5种通知小例子

SpringBoot默认开启AOP,采用Cglib代理方式?(Spring AOP快速入门)

SpringBoot默认开启AOP,采用Cglib代理方式?(Spring AOP快速入门)

SpringBoot默认开启AOP,采用Cglib代理方式?(Spring AOP快速入门)

转:Spring AOP 注解方式实现的一些“坑”

SpringBoot中使用LoadTimeWeaving技术实现AOP功能