网站首页 > java教程 正文
1.静态代理
需要目标类实现接口,代理类和目标类实现相同的接口,静态代理,是有代理类的,而动态代理是没有的。
1.1定义接口类UserService
1.2定义接口类的实现类
也就是我们的目标类,我们需要增强的类
1.3定义目标类的代理类
要和目标类实现相同的接口,在此代理类的方法中进行增强
1.4测试
测试一下,原本目标类中有个方法是返回iloveyou,在代理类中,我们对此方法进行了增强,将字母转为了大写进行返回
测试结果如下:
2.jdk动态代理
jdk动态代理的原理是,和目标类实现共同的接口,由Proxy.newProxyInstance生成一个代理对象,在代理对象调用方法时,在invoke方法中增强。
jdk动态代理,不需要代理类,他的实现必须是要求目标类实现了某个接口,然后代理对象和目标类实现了相同的接口。
2.1定义接口
2.2定义实现类
也就是需要增强的目标类
2.3测试jdk动态代理
结果:
3.cglib动态代理
cglib动态代理的原理是,生成目标类的子类,在子类中进行增强,这个子类对象就是代理对象。
使用cglib代理时,要求目标类必须可以被继承,即没有用final修饰。
CGLIB(code generation Library)是一个开源项目,是一个强大的,高性能的,高质量的代码生成类库。他可以在运行期间拓展和增强java类,Spring用它来实现AOP编程。
3.1目标类UserService
不需要实现接口
3.2代理工厂
用来生成目标类的代理对象,此类需要实现MethodInterceptor
3.3测试cglib动态代理
猜你喜欢
- 2024-10-04 java:jdk动态代理(jdk动态代理实现aop)
- 2024-10-04 Java中代理的理解及其实现方式(1)- 静态代理
- 2024-10-04 Java三种代理模式:静态代理、动态代理和cglib代理
- 2024-10-04 Java 学习笔记--反射与代理机制(静态、动态)
- 2024-10-04 Java的动态代理如何实现?#程序员(java动态代理有什么用)
- 2024-10-04 Java动态代理与静态代理以及它能为我们做什么
- 2024-10-04 Java - 动态代理实现原理以及ASM技术
- 2024-10-04 深入理解Java反射和动态代理(jdk动态代理和反射)
- 2024-10-04 Java动态代理简单介绍(java动态代理的两种方式)
- 2024-10-04 Java核心技术点之动态代理(java动态代理实现三种方式)
你 发表评论:
欢迎- 06-15Linux中如何通过Shell脚本来控制Spring Boot的Jar包启停服务?
- 06-15推荐一款超棒的SpringCloud 脚手架项目
- 06-15IDEA将项目打包成jar包(idea打包普通java项目)
- 06-15Spring Boot3 项目 jar 包打包成 Docker 镜像全攻略
- 06-15记录Dockerfile将jar包构建成部署所需的镜像
- 06-15项目基础部署汇总八---linux下xxl-job安装
- 06-15Spring Boot Jar 包秒变 Docker 镜像实现多环境部署
- 06-15终端执行 java -jar example.jar 时报错:“没有主清单属性” 的解决
- 最近发表
-
- Linux中如何通过Shell脚本来控制Spring Boot的Jar包启停服务?
- 推荐一款超棒的SpringCloud 脚手架项目
- IDEA将项目打包成jar包(idea打包普通java项目)
- Spring Boot3 项目 jar 包打包成 Docker 镜像全攻略
- 记录Dockerfile将jar包构建成部署所需的镜像
- 项目基础部署汇总八---linux下xxl-job安装
- Spring Boot Jar 包秒变 Docker 镜像实现多环境部署
- 终端执行 java -jar example.jar 时报错:“没有主清单属性” 的解决
- 如何将本地JAR文件添加到Maven项目中
- Java 类隔离应用:多 Jar 包支持(java接口隔离原则)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)