创建业务接口
public interface IMessage {
void send(String content);
}
创建实现该业务接口的子类
public class MessageImpl implements IMessage {
@Override
public void send(String content) {
System.out.println("【MessageImpl】" + content);
}
}
创建动态代理类
public class MyProxy implements InvocationHandler {
private Object target;
public Object bind(Object target) {
this.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), this);
}
private boolean connect() {
System.out.println("【MyProxy】connect.");
return true;
}
private void close () {
System.out.println("【MyProxy】closed.");
}
private void handleMessage() {
System.out.println("【MyProxy】handle message.");
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object object = null;
if (this.connect()) {
this.handleMessage();
method.invoke(this.target, args);
this.close();
}
return object;
}
}
创建工厂类
public class ProxyFactory {
private ProxyFactory() {}
public static IMessage getInstance() {
return (IMessage) new MyProxy().bind(new MessageImpl());
}
}
测试代码
public class DynamicProxyDemo {
public static void main(String[] args) {
IMessage message = ProxyFactory.getInstance();
message.send("www.baidu.com");
}
}
代码执行结果
【MyProxy】connect.
【MyProxy】handle message.
【MessageImpl】www.baidu.com
【MyProxy】closed.