1. 程式人生 > >(原創)spring AOP 在service 層 不執行

(原創)spring AOP 在service 層 不執行


先上程式碼

@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("執行切面");

    }
}

Spring AOP 應用在service中的注意事項: 將service中的一個方法設定為切點 然後,通過controller 呼叫 或者,通過org.junit 單元測試呼叫 不論是同步執行緒,還是非同步執行緒,切面都會執行 但是,如果在本service 類中,呼叫這個切點方法,則切面不會執行,哪怕是非同步的執行緒去呼叫(public or private or static 都不行); 所以,要使用切面,不要在本類中呼叫切點方法。新建一個serviceAspect類,通過當前service 呼叫serviceAspect的切點方法(同時將切點配置為serviceAspect 中的方法)