package com.lean.ssm.chapter2.proxy1;
public interface HelloWorld {
void sayHelloWorld();
}
package com.lean.ssm.chapter2.proxy1;
public class HelloWorldImp {
public void sayHelloWorld() {
System.out.println("hello");
}
}
package com.lean.ssm.chapter2.proxy1;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class JdkProxyExample implements InvocationHandler {
private Object target = null;
public Object bind(Object target) {
this.target = target;
return
Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("进入代理逻辑方法");
System.out.println("调度真实对象之前的服务");
Object obj = method.invoke(target, args);
System.out.println("调度真实对象之后的服务");
return obj;
}
}
package com.lean.ssm.chapter2.proxy1;
public class ProxyTest {
public static void main(String[] args) {
testJdkProxy();}
private static void testJdkProxy() {
JdkProxyExample jdk = new JdkProxyExample();
HelloWorld proxy = (HelloWorld) jdk.bind(new HelloWorldImp());
proxy.sayHelloWorld();}
}
Консоль:
Исключение в потоке "main" java.lang.ClassCastException: com.sun.proxy. $ Proxy0 не может быть приведен к com.lean.ssm.chapter2.proxy1.HelloWorld
в com.lean.ssm.chapter2.proxy1.ProxyTest.testJdkProxy (ProxyTest.java:8)
at com.lean.ssm.chapter2.proxy1.ProxyTest.main (ProxyTest.java:5)