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();
}
}