没有合适的资源?快使用搜索试试~ 我知道了~
代理模式(Proxy Pattern) 代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 如下列子: package proxy; interface Dao{ public void insert(); } class JdbcDao implements Dao{ public void
资源详情
资源评论
资源推荐
Java 代理代理(proxy)模式模式
代理模式(Proxy Pattern)
代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过
滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委
托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。
如下列子:
package proxy;
interface Dao{
public void insert();
}
class JdbcDao implements Dao{
public void insert(){
System.out.println("in jdbc insert");
}
}
class HibernateDao implements Dao{
public void insert(){
System.out.println("in hibernate insert");
}
}
class ProxyDao implements Dao{
private Dao dao;
public ProxyDao(Dao dao){
this.dao=dao;
}
public void insert() {
System.out.println("write log before invoke");
dao.insert();
System.out.println("write log after invoke");
}
}
public class Test {
public static void main(String[] args) {
Dao jdbcDao =new JdbcDao();
Dao proxydao = new ProxyDao(jdbcDao);
proxydao.insert();
}
}
运行结果:
write log before invoke
in jdbc insert
write log after invoke随着Proxy的流行,Sun把它纳入到JDK1.3实现了Java的动态代理。动态代理和普通的代理模式的区
别,是动态代理中的代理类是由 java.lang.reflect.Proxy类在运行期时根据接口定义,采用Java反射功能动态生成的。和
java.lang.reflect.InvocationHandler结合,可以加强现有类的方法实现。如图2,图中的自定义Handler实现 InvocationHandler
接口,自定义Handler实例化时,将实现类传入自定义Handler对象。自定义Handler需要实现 invoke方法,该方法可以使用
Java反射调用实现类的实现的方法,同时当然可以实现其他功能,例如在调用实现类方法前后加入Log。而Proxy类根据
Handler和需要代理的接口动态生成一个接口实现类的对象。当用户调用这个动态生成的实现类时,实际上是调用了自定义
Handler的 invoke方法。
weixin_38507121
- 粉丝: 10
- 资源: 929
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0