import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class StaticAndDynamicProxy {
public static void main(String args[]) {
System.out.println("The static proxy");
ICalculator iCalculator = new CalculatorProxy(new CalculatorImpl());
int result = iCalculator.add(2, 5);
System.out.println("In the main() " + result);
System.out.println(iCalculator.minus(10, 2));
System.out.println("The dynamic proxy");
ICalculator calculator = new CalculatorImpl();
LogHandler lh = new LogHandler(calculator);
ICalculator proxy = (ICalculator) Proxy.newProxyInstance(calculator.getClass().getClassLoader(),
calculator.getClass().getInterfaces(), lh);
int r = proxy.add(3, 6);
System.out.println("In the main() " + r);
System.out.println(proxy.minus(100, 30));
}
}
interface ICalculator {
int add(int a, int b);
int minus(int a, int b);
}
class CalculatorImpl implements ICalculator{
public int add(int a, int b) {
return a + b;
}
public int minus(int a, int b) {
return a - b;
}
}
class CalculatorProxy implements ICalculator {
private CalculatorImpl calculatorImpl;
public CalculatorProxy(CalculatorImpl cImpl) {
this.calculatorImpl = cImpl;
}
public int add(int a, int b) {
this.doBefore();
int result = calculatorImpl.add(a, b);
System.out.println("In the Proxy " + result);
this.doAfter();
return result;
}
public int minus(int a, int b) {
this.doBefore();
int result = calculatorImpl.minus(a, b);
System.out.println("In the Proxy " + result);
this.doAfter();
return result;
}
public void doBefore() {
System.out.println("Do Before");
}
public void doAfter() {
System.out.println("Do After");
}
}
class LogHandler implements InvocationHandler {
Object object;
public LogHandler(Object o) {
this.object = o;
}
public Object invoke(Object obj1, Method method, Object[] args) {
this.doBefore();
Object o = null;
try {
o = method.invoke(object, args);
System.out.println(o);
} catch (Exception e) {
e.printStackTrace();
}
this.doAfter();
return o;
}
public void doBefore() {
System.out.println("Do Before");
}
public void doAfter() {
System.out.println("Do After");
}
}
靜態代理與動態代理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.