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将被代理对象与某片内存数据关联起来,拦截方法之后,可以做一些方法缓存之类的功能。

猜你喜欢

转载自www.cnblogs.com/hellohello/p/10291617.html