private Object target;
/**
* DOC 通过反射动态生成一个代理对象.调用该对象的任何一个方法,都会进入invoke方法里
*
* @param target
* @return
*/
public Object bind(Object target) {
this.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = null;
System.out.println("方法执行之前...");
result = method.invoke(target, args);
System.out.println("方法执行之后...");
return result;
}
}
package auction;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class DynamicProxy implements InvocationHandler {
private Object target;
/**
* DOC 通过反射动态生成一个代理对象.调用该对象的任何一个方法,都会进入invoke方法里
*
* @param target
* @return
*/
public Object bind(Object target) {
this.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = null;
System.out.println("方法执行之前...");
result = method.invoke(target, args);
System.out.println("方法执行之后...");
return result;
}
}
[java] package auction;
/**
* DOC 拍卖行类
*/
public class AuctionShop implements IAuctionShop {
/**
* 卖东西
*/
public void sellGoods() {
System.out.println("您拍卖了XXX东西");
}
/**
* 买东西
*/
public void buyGoods() {
System.out.println("您购买了XXX东西");
}
}
package auction;
/**
* DOC 拍卖行类
*/
public class AuctionShop implements IAuctionShop {
/**
* 卖东西
*/
public void sellGoods() {
System.out.println("您拍卖了XXX东西");
}
/**
* 买东西
*/
public void buyGoods() {
System.out.println("您购买了XXX东西");
}
}
测试类:
[java] package test;
import auction.AuctionShop;
import auction.DynamicProxy;
import auction.IAuctionShop;
public class DynamicProxyTest {
public static void main(String[] args) {
DynamicProxy proxy = new DynamicProxy();
IAuctionShop auctionShop = (IAuctionShop) proxy.bind(new AuctionShop());
auctionShop.buyGoods();
}
}
package test;
import auction.AuctionShop;
import auction.DynamicProxy;
import auction.IAuctionShop;
public class DynamicProxyTest {
public static void main(String[] args) {
DynamicProxy proxy = new DynamicProxy();
IAuctionShop auctionShop = (IAuctionShop) proxy.bind(new AuctionShop());
auctionShop.buyGoods();
}
}
测试结果:
方法执行之前...
您购买了XXX东西
方法执行之后
摘自 a107494639的专栏