动态代理小demo
public interface Calculator {
int add(int i,int j);
}
public class CalculatorImpl implements Calculator{
@Override
public int add(int i, int j) {
int result= i+j;
System.out.println("内部方法"+result);
return result;
}
}
创建代理的类
public class ProxyFactory {
//目标对象
private Object target;
public ProxyFactory(Object target) {
this.target = target;
}
public Object getProxy(){
return Proxy.newProxyInstance(ProxyFactory.class.getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("日志...方法名"+method.getName() + "参数为"+ Arrays.toString(args));
Object invoke = method.invoke(target, args);
System.out.println("日志...计算结束");
return invoke;
}
});
}
}
测试类
ProxyFactory proxyFactory = new ProxyFactory(new CalculatorImpl());
//创建代理对象
Calculator proxy1 = (Calculator) proxyFactory.getProxy();
int add = proxy1.add(1, 2);