JDK动态代理

package JdkProxyTest;

/**  
* @ClassName: ToyDao  
* @Description: TODO(这里用一句话描述这个类的作用)  
* @author Administrator  
* @date 2019年5月27日  
*    
*/

public interface ToyDao {
    public void product();
    public void sail();
    public void transfer();
}

 

/**
 * 
 */
package JdkProxyTest;

/**  
* @ClassName: ToyDaoImpl  
* @Description: TODO(这里用一句话描述这个类的作用)  
* @author Administrator  
* @date 2019年5月27日  
*    
*/

public class ToyDaoImpl implements ToyDao{

    @Override
    public void product() {
        // TODO Auto-generated method stub
        System.out.println("生产玩具");
    }

    @Override
    public void sail() {
        // TODO Auto-generated method stub
        System.out.println("销售玩具");
    }

    @Override
    public void transfer() {
        // TODO Auto-generated method stub
        System.out.println("运输玩具");
    }

}
 

 

 

/**
 * 
 */
package JdkProxyTest;

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

/**  
* @ClassName: JdkProxy  
* @Description: TODO(这里用一句话描述这个类的作用)  
* @author Administrator  
* @date 2019年5月27日  
*    
*/

public class JdkProxy implements InvocationHandler{
    
    private ToyDao toyDao;
    public JdkProxy(ToyDao toyDao)
    {
        this.toyDao=toyDao;
    }
    public ToyDao createToyDao()//注意     生成的是一个代理对象,而不是toyDao
    {
        ToyDao toyDaoProxy=(ToyDao) Proxy.newProxyInstance(toyDao.getClass().getClassLoader(), toyDao.getClass().getInterfaces(), this);
        return toyDaoProxy;
        
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // TODO Auto-generated method stub
        //代理对象执行方法的时候,默认会调用invoke方法,在这个方法中执行动态代理
        if(method.getName().equals("product"))//记住,这里比较的是method的name,而不是method对象
        {
            System.out.println("代理执行Proxy-Product-begin方法");
             method.invoke(toyDao, args);//这里 通过method.invoke 方法,参数一个是要执行的对象,另外一个是参数
            System.out.println("代理执行Proxy-Product-end方法");
            return "========================";
        }
        return method.invoke(toyDao, args);
    }
}
 

 

 

/**
 * 
 */
package JdkProxyTest;

import static org.junit.Assert.*;

import org.junit.Test;

/**  
* @ClassName: JdkProxyTest  
* @Description: TODO(这里用一句话描述这个类的作用)  
* @author Administrator  
* @date 2019年5月27日  
*    
*/

public class JdkProxyTest {
    @Test
    public void testJdkProxy() throws Exception {
        ToyDao toyDao=new ToyDaoImpl();
        ToyDao proxy=new JdkProxy(toyDao).createToyDao();
        proxy.product();
        proxy.transfer();
        proxy.sail();
    }
}
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值