没有合适的资源?快使用搜索试试~ 我知道了~
Java动态代理方法详解.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 194 浏览量
2022-07-02
22:19:54
上传
评论
收藏 41KB DOCX 举报
温馨提示
试读
23页
1.什么是动态代理 ? 使用jdk的反射机制,创建对象的能力, 创建的是代理类的对象。 而不用你创建类文件。不用写java文件。 动态:在程序执行时,调用jdk提供的方法才能创建代理类的对象。 jdk动态代理,必须有接口,目标类必须实现接口, 没有接口时,需要使用cglib动态代理 1.知道动态代理能做什么 ? 可以在不改变原来目标方法功能的前提下, 可以在代理中增强自己的功能代码。 程序开发中的意思。 比如:你所在的项目中,有一个功能是其他人(公司的其它部门,其它小组的人)写好的,你可以使用。 GoNong.class , GoNong gn = new GoNong(), gn.print(); 你发现这个功能,现在还缺点, 不能完全满足我项目的需要。 我需要在gn.print()执行后,需要自己在增加代码。 用代理实现 gn.print()调用时, 增加自己代码, 而不用去改原来的 GoNong文件 后面会有,mybatis ,spring
资源推荐
资源详情
资源评论
Java 动态代理方法详解
目录
一、代理
o 1. 什么是代理?
o 2. 使用代理模式的作用
o 3. 实现代理的方式
二、静态代理
o 1. 模拟用户购买 u 盘
o 2. 静态代理的缺点
三、动态代理
四、 JDK 动态代理
o 1. InvocationHandler 接口
o 2. Method 类
o 3. Proxy 类
o 4. 实现动态代理的步骤
五、cgLib 代理
六、练习
动态代理(理解): 基于反射机制。
现在需要知道以下的就行:
1. 什么是动态代理 ?
使用 jdk 的反射机制,创建对象的能力, 创建的是代理类的对象。 而不用你创
建类文件。不用写 java 文件。
动态:在程序执行时,调用 jdk 提供的方法才能创建代理类的对象。
jdk 动态代理,必须有接口,目标类必须实现接口, 没有接口时,需要使用
cglib 动态代理
1. 知道动态代理能做什么 ?
可以在不改变原来目标方法功能的前提下, 可以在代理中增强自己的功能代码。
程序开发中的意思。
比如:你所在的项目中,有一个功能是其他人(公司的其它部门,其它小组的
人)写好的,你可以使用。
GoNong.class , GoNong gn = new GoNong(), gn.print();
你发现这个功能,现在还缺点, 不能完全满足我项目的需要。 我需要在
gn.print()执行后,需要自己在增加代码。
用代理实现 gn.print ()调用时, 增加自己代码, 而不用去改原来的 GoNong
文件
后面会有,mybatis ,spring
一、代理
1. 什么是代理?
代购, 中介,换 ip,商家等等
比如有一家美国的大学, 可以对全世界招生。 留学中介(代理)
留学中介(代理): 帮助这家美国的学校招生, 中介是学校的代理, 中介是
代替学校完成招生功能。
代理特点:
1. 中介和代理他们要做的事情是一致的: 招生。
2. 中介是学校代理, 学校是目标。
3. 家长---中介(学校介绍,办入学手续)----美国学校。
4. 中介是代理,不能白干活,需要收取费用。
5. 代理不让你访问到目标。
或者是买东西都是商家卖, 商家是某个商品的代理, 你个人买东西, 肯定不
会让你接触到厂家的。
在开发中也会有这样的情况, 你有 a 类, 本来是调用 c 类的方法, 完成某个
功能。 但是 c 不让 a 调用。
a ----- 不能调用 c 的方法。
在 a 和 c 直接 创建一个 b 代理, c 让 b 访问。
a --访问 b---访问 c
2. 使用代理模式的作用
1. 功能增强: 在你原有的功能上,增加了额外的功能。 新增加的功能,叫做功能增
强。
2. 控制访问: 代理类不让你访问目标,例如商家不让用户访问厂家。
3. 实现代理的方式
静态代理和动态代理
二、静态代理
静态代理是指,代理类在程序运行前就已经定义好.java 源文件,其与目标类的
关系在 程序运行前就已经确立。在程序运行前代理类已经编译为.class 文件。
代理类是自己手工实现的,自己创建一个 java 类,表示代理类。
同时你所要代理的目标类是确定的。
特点: 实现简单 、容易理解
缺点:
当你的项目中,目标类和代理类很多时候,有以下的缺点:
当目标类增加了, 代理类可能也需要成倍的增加。 代理类数量过多。
当你的接口中功能增加了, 或者修改了,会影响众多的实现类,厂家类,代理都
需要修改。
1. 模拟用户购买 u 盘
用户是客户端类
商家:代理,代理某个品牌的 u 盘。
厂家:目标类。
三者的关系: 用户(客户端)---商家(代理)---厂家(目标)
商家和厂家都是卖 u 盘的,他们完成的功能是一致的,都是卖 u 盘。
实现步骤:
1. 创建一个接口,定义卖 u 盘的方法, 表示你的厂家和商家做的事情
package com.md.service;
/**
* @author MD
* @create 2020-08-03 9:06
*/
// 表示功能,厂家和商家都要完成的功能
public interface UsbSell {
// 定义方法,返回值为 u 盘的价格
float sell(int amount);
}
1. 创建厂家类,实现 1 步骤的接口
package com.md.factory;
import com.md.service.UsbSell;
/**
* @author MD
* @create 2020-08-03 9:11
*/
// 目标类。金士顿厂家
public class UsbKingFactory implements UsbSell {
@Override
public float sell(int amount) {
return 50.0f;
}
}
1. 创建商家,就是代理,也需要实现 1 步骤中的接口。
package com.md.shangjia;
import com.md.factory.UsbKingFactory;
import com.md.service.UsbSell;
import java.lang.reflect.AccessibleObject;
/**
* @author MD
* @create 2020-08-03 9:13
*/
// 代理类,这是商家,代理金士顿 u 盘销售
public class Taobao implements UsbSell {
// 访问目标类
// 声明商家代理的厂家是谁
private UsbSell factory = new UsbKingFactory();
// 实现销售 u 盘的功能
@Override
public float sell(int amount) {
// 向厂家发送订单,告诉厂家,进行发货,这是进货价格
float price = factory.sell(amount);
剩余22页未读,继续阅读
资源评论
小兔子平安
- 粉丝: 209
- 资源: 1940
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功