IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> spring aop代理控制 -> 正文阅读

[Java知识库]spring aop代理控制


spring aop代理控制

????????

???????????????

???????????????????????????????????

代理方式

??????

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

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

???????

springboot 默认代理行为

# 通过参数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;

    @Resource
    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

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

?????????

?????????????????

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:15:04  更:2022-04-24 09:16:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:50:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码