最近在学习Java代理模式,下面是学习心得
1,对于静态代理:
interface ProxyInterFace {
void sayHello();
}
static class TargetObject implements ProxyInterFace {
@Override
public void sayHello() {
System.out.println("hello world");
}
}
static class ProxyObject implements ProxyInterFace {
private ProxyInterFace object;
public ProxyObject(ProxyInterFace obj) {
this.object = obj;
}
@Override
public void sayHello() {
object.sayHello();
}
}
public static void main(String[] args) {
//代理的目标对象
ProxyInterFace proxyInterFace = new TargetObject();
//代理器
ProxyObject proxyObject = new ProxyObject(proxyInterFace);
//调用目标对象的方法, 执行代码任务
proxyObject.sayHello();
}
2,对于动态代理:
interface ProxyInterFace {
void sayHello();
}
static class TargetObject implements ProxyInterFace {
@Override
public void sayHello() {
System.out.println("hello world");
}
}
static class ProxyObject implements InvocationHandler {
private Object object;
public ProxyObject(Object obj) {
this.object = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//do something
return method.invoke(object, args);
//do something
}
}
public static void main(String[] args) {
//代理的目标对象
ProxyInterFace proxyInterFace = new TargetObject();
//代理器
ProxyObject proxyObject = new ProxyObject(proxyInterFace);
//转换成InvocationHandler
InvocationHandler handler = proxyObject;
//执行代码任务
Object proxy = Proxy.newProxyInstance(proxyInterFace.getClass().getClassLoader(), proxyInterFace.getClass().getInterfaces(), handler);
//转换成目标对象,调用目标对象的方法
((ProxyInterFace) proxy).sayHello();
}