代理模式

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本人声明。否则将追究法律责任。
作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui0317/article/details/7881436

一、什么事代理模式?


       代理模式就是说某一个功能不能直接调用而要通过一个中间人来实现这样一个互通的功能,比如在springhibernate集成的时候,我们要做增删改操作时不能直接开启事务操作,所以可以通过TransactionManager事务管理器这个代理来完成,我们要做的就只有配置了,代理它分为三种角色:实际角色,抽象角色,代理角色。根据业务需求,实际角色不会被调用,而是通过代理角色来动态实现的。

二、代理模式分为哪几种?分别是怎么用的?


   1)静态代理

      静态代理的特点就是一个业务操作对应一个代理,这样的话,如果业务需求很多就要写很多代理角色,这非常不利于维护和管理,所以这种静态代理并不太被认同。

   2)动态代理

      动态代理,顾名思义,就是动态的可以实现多个业务需求实现多种代理服务。这就需要我们定义一个公用的代理类,这个类不是代理类,只是一个可以拿到代理对象的类,该类要实现InvocationHandler

接口,重写invoke(),该方法实际上是通过反射动态掉用的目标方法。但是如何拿到代理对象呢。

/**
 * 动态代理
 * @author Administrator
 *
 */
public class DynamicProxy implements InvocationHandler{
	//目标对象
	private Object target;	
	public DynamicProxy(Object target){
		this.target = target;
	}
	//通过反射动态调用目标方法
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		System.out.println("开始增加~~~~~");
		Object result = method.invoke(target, args);
		System.out.println("完成增加~~~~~");
		return result;
	}
	
	//动态得到代理对象
	public Object getProxy(){
		return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
	}	
}

三、说说代理模式的好处?

动态代理,它实现了无法直接调用目标对象而是通过代理实现调用目标对象的这样一个需求,满足了某些特殊功能的需求。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值