在日常使用,還有面試中,經(jīng)常會涉及到AOP的相關(guān)知識,AOP雖好,但是有一些小的細(xì)節(jié)注意不到,可能會被坑; 1.動態(tài)代理類的方法互調(diào),被調(diào)用的方法會不會生成代理? 2.靜態(tài)成員類,調(diào)用過程中會不會生成代理? 對以上這些問題進(jìn)行測試: 首頁,這是AOP切面代碼 @Component @Aspect public class AopTest { @Pointcut("execution(public * com.wuzhiaite.javaweb.spring.serveice.AopServiceTest.*(..))") public void AopTest(){ } 接下來:被代理類的代碼 @Service public class AopServiceTest { public void testMethod(){ new Inner().innerMethod(); System.out.println("testMethod"); this.testMethod2(); } public void testMethod2(){ System.out.println("testMethod22222222"); } public static class Inner{ public void innerMethod(){ System.out.println("innerMethod"); } } } 再接下來,測試以下: @RunWith(SpringJUnit4ClassRunner.class) @Slf4j @EnableAspectJAutoProxy public class SpringBootJavawebBaseApplicationTests { @Autowired private AopServiceTest service; @Test public void aopTest1(){ service.testMethod(); new AopServiceTest.Inner().innerMethod();//靜態(tài)內(nèi)部類并不會生成代理類 } } 測試出來的結(jié)果是:
很顯然,靜態(tài)成員類和方法內(nèi)部調(diào)用的方法并沒有生成代理,至于原因,后面康康源碼再補(bǔ)充
|
|