(原创)spring AOP 在service 层 不执行

来源:互联网 发布:淘宝怎么设置花呗付款 编辑:程序博客网 时间:2024/06/04 17:54


先上代码

@Servicepublic class TestServiceImpl implements TestServiceI{private ExecutorService executor = Executors.newFixedThreadPool(15);@Overridepublic void localMethod(){System.out.println("本类public方法")}executor.execute(new Runnable() {    @Override    public void run() {        localMethod();    }});}@Aspect@Componentpublic class TestAspect {    @Pointcut("execution(public * com.tt.*.service.TestService.localMethod(..))")    public void localMethod(){}    @AfterReturning(pointcut = "localMethod()",returning = "returnValue")    public void after(Object returnValue) {              System.out.println("执行切面");    }}
Spring AOP 应用在service中的注意事项:
将service中的一个方法设置为切点
然后,通过controller 调用
或者,通过org.junit 单元测试调用
不论是同步线程,还是异步线程,切面都会执行
但是,如果在本service 类中,调用这个切点方法,则切面不会执行,哪怕是异步的线程去调用(public or private or static 都不行);
所以,要使用切面,不要在本类中调用切点方法。新建一个serviceAspect类,通过当前service 调用serviceAspect的切点方法(同时将切点配置为serviceAspect 中的方法)

阅读全文
0 0
原创粉丝点击