spring?aop代理控制的操作方式
spring aop可通過參數(shù)proxyTargetProxy控制創(chuàng)建代理的方式
proxyTargetProxy=true:強制使用cglib代理
proxyTargetProxy=false:目標實現(xiàn)類實現(xiàn)了接口使用jdk,沒有實現(xiàn)接口則使用cglib
springboot 默認代理行為
# 通過參數(shù)spring.aop.proxy-target-proxy控制 1.x:proxy-target-proxy=false 2.x:proxy-target-proxy=true
默認代理行為
HelloService
public interface HelloService { String hello(); }
HelloServiceImpl
@Service public class HelloServiceImpl implements HelloService { @Override public String hello() { return "hello"; } }
HelloService2Impl
@Service public class HelloService2Impl { public String hello(){ return "hello2"; } }
CustomAspect
@Aspect @Component public class CustomAspect { @Pointcut("execution(* *.hello(..))") public void fun(){ } @Before("fun()") public void before(JoinPoint joinPoint){ System.out.print("before ==> "); MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); System.out.println(method.getDeclaringClass().getName()+"."+method.getName()); }
HelloController
@RestController public class HelloController { @Resource private HelloService helloService; private HelloService2Impl helloService2; @RequestMapping("/hello") public String hello(){ /* System.out.println("HelloController helloService.hello():"+helloService.hello()); System.out.println("HelloController helloService2.hello():"+helloService2.hello()); */ System.out.println(helloService.getClass().getName()); System.out.println(helloService2.getClass().getName()); return "success"; } }
localhost:8080/hello,控制臺輸出:
2022-04-23 22:32:19.334 INFO 1224 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 737 ms
2022-04-23 22:32:19.638 INFO 1224 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2022-04-23 22:32:19.646 INFO 1224 --- [ main] com.example.demo.DemoApplication : Started DemoApplication in 1.351 seconds (JVM running for 1.774)
2022-04-23 22:32:23.915 INFO 1224 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2022-04-23 22:32:23.915 INFO 1224 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2022-04-23 22:32:23.916 INFO 1224 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
before ==> com.example.demo.controller.HelloController.hello
# 無論是否實現(xiàn)接口都使用cglib創(chuàng)建代理
com.example.demo.service.impl.HelloServiceImpl$$EnhancerBySpringCGLIB$$b6dcbbe7
com.example.demo.service.impl.HelloService2Impl$$EnhancerBySpringCGLIB$$589ac389
修改代理行為
application.properties
spring.aop.proxy-target-class=false
localhost:8080/hello,控制臺輸出:
2022-04-23 22:40:14.300 INFO 1237 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 935 ms
2022-04-23 22:40:14.639 INFO 1237 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2022-04-23 22:40:14.647 INFO 1237 --- [ main] com.example.demo.DemoApplication : Started DemoApplication in 1.594 seconds (JVM running for 2.17)
2022-04-23 22:40:17.156 INFO 1237 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2022-04-23 22:40:17.156 INFO 1237 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2022-04-23 22:40:17.157 INFO 1237 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
before ==> com.example.demo.controller.HelloController.hello
# helloServiceImpl使用jdk創(chuàng)建代理對象
com.sun.proxy.$Proxy56
# helloService2Impl使用cglib創(chuàng)建代理對象
com.example.demo.service.impl.HelloService2Impl$$EnhancerBySpringCGLIB$$f6915580
到此這篇關(guān)于springaop代理控制的文章就介紹到這了,更多相關(guān)springaop代理控制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用釘釘創(chuàng)建企業(yè)內(nèi)部機器人的實現(xiàn)
釘釘?shù)某霈F(xiàn)為企業(yè)節(jié)約了大量人力成本,其中也開放了大量的外部api接口方便企業(yè)使用。本文主要介紹了Java使用釘釘創(chuàng)建企業(yè)內(nèi)部機器人的實現(xiàn),感興趣的可以了解一下2021-11-11SpringBoot用JdbcTemplates訪問Mysql實例代碼
本篇文章主要介紹了SpringBoot用JdbcTemplates訪問Mysql實例代碼,非常具有實用價值,需要的朋友可以參考下2017-05-05Java 實戰(zhàn)項目之小說在線閱讀系統(tǒng)的實現(xiàn)流程
讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實現(xiàn)前臺閱讀后臺管理的小說在線閱讀系統(tǒng),大家可以在過程中查缺補漏,提升水平2021-11-11關(guān)于idea2020.3升級lombok不能使用的問題
這篇文章主要介紹了關(guān)于idea2020.3升級lombok不能使用的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12