(原創)spring AOP 在service 層 不執行
阿新 • • 發佈:2019-02-19
先上程式碼
Spring AOP 應用在service中的注意事項: 將service中的一個方法設定為切點 然後,通過controller 呼叫 或者,通過org.junit 單元測試呼叫 不論是同步執行緒,還是非同步執行緒,切面都會執行 但是,如果在本service 類中,呼叫這個切點方法,則切面不會執行,哪怕是非同步的執行緒去呼叫(public or private or static 都不行); 所以,要使用切面,不要在本類中呼叫切點方法。新建一個serviceAspect類,通過當前service 呼叫serviceAspect的切點方法(同時將切點配置為serviceAspect 中的方法)@Service public class TestServiceImpl implements TestServiceI{ private ExecutorService executor = Executors.newFixedThreadPool(15); @Override public void localMethod(){ System.out.println("本類public方法") } executor.execute(new Runnable() { @Override public void run() { localMethod(); } }); } @Aspect @Component public 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("執行切面"); } }