OrderService接口
public interface OrderService {
String getName();
void generate();
void modify();
void detail();
}
OrderServiceImpl
public class OrderServiceImpl implements OrderService {
@Override
public String getName() {
return "zhangsan";
}
@Override
public void generate() {
try {
Thread.sleep(1234);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("order generate...");
}
@Override
public void modify() {
try {
Thread.sleep(456);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("order modify...");
}
@Override
public void detail() {
try {
Thread.sleep(41);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("order detail...");
}
}
OrderServiceDynamicProxy
public class OrderServiceDynamicProxy implements InvocationHandler {
private Object target;
public OrderServiceDynamicProxy(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("invoke...");
long begin = System.currentTimeMillis();
Object returnVal = method.invoke(target, args);
long end = System.currentTimeMillis();
System.out.println("use time: "+(end-begin)+" ms");
return returnVal;
}
}
测试类
public class OrderTest {
public static void main(String[] args) {
OrderServiceImpl target = new OrderServiceImpl();
// Proxy.newProxyInstance(类加载器,代理类要实现的接口,调用处理器)
OrderService proxyObj = (OrderService) Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new OrderServiceDynamicProxy(target)
);
proxyObj.generate();
proxyObj.modify();
proxyObj.detail();
String name = proxyObj.getName(); //这里取决于OrderServiceDynamicProxy的invoke是否返回值了
System.out.println(name);
}
}