动态代理JDKf方式InvocationHandler、Proxy

动态代理是一种设计模式  jdk动态代理只能代理接口

 

主要原理是java的反射机制和泛型

 

InvocationHandler 事务处理类的接口  这里实现代理过程中业务处理的逻辑 ,比如一个火车票代理点,在这里就可以新增收取手续费的功能

 

invoke方法第一个参数是真正的代理类,第二个参数是被代理的方法,第三个参数是方法中传入的参数

 

package dongtaidaili;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/** * @author  lh 
    * @date 创建时间:2017年4月28日 上午9:58:30
    */
public class PersonHandler implements InvocationHandler {

	
	private Object obj;  
    
    public PersonHandler(Object obj){  
        this.obj=obj;  
    }  
	@Override
	/**
	 * proxy:  指代我们所代理的那个真实对象
       method:  指代的是我们所要调用真实对象的某个方法的Method对象
       args:  指代的是调用真实对象某个方法时接受的参数
	 */
	
	//当我们通过代理对象调用一个方法的时候,这个方法的调用就会被转发为由InvocationHandler这个接口的 invoke 方法来进行调用
	//method是指被代理的方法
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		//在转调具体目标对象之前,可以执行一些功能处理
		//在这里就可以实现过滤
		System.out.println("执行method方法之前    proxy name="+proxy.getClass().getName()); 
		//转调具体目标对象的方法
	    Object result = method.invoke(obj, args);  
	    //在转调具体目标对象之后,可以执行一些功能处理
	    System.out.println("执行method方法之后");  
	        
	    //动态生成代理类
	    return result; 
	}

}


Proxy

 

 

 

 

这个类是用来生成真正代理的类

在完成如下代码段之后

 PersonDao proxy = (PersonDao)Proxy.newProxyInstance(pDao.getClass().getClassLoader(), pDao.getClass().getInterfaces(), handler);  

proxy就可以当做是被代理的类来使用

 

在这个方法中第一个参数是被代理类的类加载器

第二个是实现的哪个接口

第三个是代理事务处理类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值