1 Person接口,人,在唱歌。
package com.myproxy;
public interface Person {
public void song();
}
2 Person的实现类
package com.myproxy;
public class PersonImpl implements Person {
@Override
public void song() {
System.out.println("person song!");
}
}
3 需要调用的方法
package com.myproxy;
public class Util {
public void dog() {
System.out.println("Dog song!");
}
public void cat() {
System.out.println("Cat song!");
}
}
4 实现InvocationHandler
package com.myproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class MyInvocationHandler implements InvocationHandler {
private Object target;
public void setTarget(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Util util = new Util();
util.cat();
Object invoke = method.invoke(target, args);
util.dog();
return invoke;
}
}
5 写一个获取代理对象的工厂
package com.myproxy;
import java.lang.reflect.Proxy;
public class ProxyFactory {
public Object getProxy(Object target) {
MyInvocationHandler h = new MyInvocationHandler();
h.setTarget(target);
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), h);
}
}
6 测试
package com.myproxy;
public class TestProxy {
public static void main(String[] args) {
Person target = new PersonImpl();
ProxyFactory factory = new ProxyFactory();
Person person = (Person) factory.getProxy(target);
person.song();
}
}