好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

spring aop代理控制的操作方式

spring aop可通过参数proxyTargetProxy控制创建代理的方式

proxyTargetProxy=true:强制使用cglib代理
proxyTargetProxy=false:目标实现类实现了接口使用jdk,没有实现接口则使用cglib

springboot 默认代理行为

?

1

2

3

# 通过参数spring.aop.proxy-target-proxy控制

1.x:proxy-target-proxy=false

2.x:proxy-target-proxy=true

默认代理行为

HelloService

?

1

2

3

public interface HelloService {

     String hello();

}

HelloServiceImpl

?

1

2

3

4

5

6

7

@Service

public class HelloServiceImpl implements HelloService {

     @Override

     public String hello() {

         return "hello" ;

     }

}

HelloService2Impl

?

1

2

3

4

5

6

@Service

public class HelloService2Impl {

     public String hello(){

         return "hello2" ;

     }

}

CustomAspect

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

@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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

@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
# 无论是否实现接口都使用cglib创建代理
com.example.demo.service.impl.HelloServiceImpl$$EnhancerBySpringCGLIB$$b6dcbbe7
com.example.demo.service.impl.HelloService2Impl$$EnhancerBySpringCGLIB$$589ac389

修改代理行为

application.properties

?

1

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创建代理对象
com.sun.proxy.$Proxy56
# helloService2Impl使用cglib创建代理对象
com.example.demo.service.impl.HelloService2Impl$$EnhancerBySpringCGLIB$$f6915580

到此这篇关于springaop代理控制的文章就介绍到这了,更多相关springaop代理控制内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://blog.csdn.net/weixin_43931625/article/details/124370609

查看更多关于spring aop代理控制的操作方式的详细内容...

  阅读:13次