必须有接口才能代理。
public interface HelloWord {
String sayHello(String toWhom);
void sayBye();
}
实现接口的方法,被代理的类:
public class HelloWordImpl implements HelloWord {
@Override
public String sayHello(String toWhom) {
System.out.println("进入了真实逻辑");
return "hello," + toWhom;
}
@Override
public void sayBye() {
System.out.println("bye");
}
}
代理类实现InvocationHandler接口,重写invoke方法,接入代理的逻辑:
public class JdkProxy implements InvocationHandler {
private Object target = null;
/**
* 绑定代理对象
*
* @param target
* @return
*/
public Object bind(Object target) {
this.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
/**
* 代理方法逻辑
*
* @param proxy
* @param method
* @param args
* @return
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("代理逻辑开始");
Object object = method.invoke(target, args);
System.out.println("代理逻辑结束");
return object;
}
}
测试类:
public class JdkProxyTest {
public static void main(String[] args) {
JdkProxy jdkProxy = new JdkProxy();
HelloWord helloWord = (HelloWord) jdkProxy.bind(new HelloWordImpl());
System.out.println(helloWord.sayHello("Tom"));
helloWord.sayBye();
}
}
测试结果: