之前在看java class的放射机制。通过反射机制可以实现java类的动态代理。我们都熟知代理模式,jdk中有invocationHandler和proxy相关接口(类)为我们体用一套实现java动态代理的框架。java的动态代理在平时开发中可能使用不多但是在框架设计上应用广泛。例如Spring框架就是建立在java动态代理机制之上的,充分的应用java动态代理将使程序变得更加灵活。
下面我们通过已经简答实例来了解一下动态代理的实现:
1.首先我们必须定义接口类(不能是抽象类),定义如下:
public interface Interface {
void doSomething();
void somethongElse(String str);
}
2.已定义接口的具体实现类:
public class RealInterface implements Interface{
public void doSomething() {
// TODO Auto-generated method stub
System.out.println("do something");
}
public void somethongElse(String str) {
// TODO Auto-generated method stub
System.out.println("something else " + str);
}
}
3.代理实现处理程序必须实现jdk中的InvocationHandler接口,当通过Proxy的代理对象实现对方法的相关调用时,proxy会将方法调用派发陪InvocationHandler的集体实例来处理:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class RealinvocationHandler implements InvocationHandler {
private Object proxied;
public RealinvocationHandler(Object proxied) {
this.proxied = proxied;
}
public Object invoke(Object arg0, Method arg1, Object[] arg2)
throws Throwable {
System.out.println("RealinvocationHandler invoke method");
return arg1.invoke(proxied, arg2);
}
}
4.最后是测试:
import java.lang.reflect.Proxy;
public class ProxyMain {
/**
* @param args
*/
public static void main(String[] args) {
RealInterface realInterface = new RealInterface();
RealinvocationHandler realHandler = new RealinvocationHandler(realInterface);
// TODO Auto-generated method stub
Interface inter = (Interface) Proxy.newProxyInstance(realHandler.getClass().getClassLoader()
, new Class[] {Interface.class}, realHandler);
inter.doSomething();
inter.somethongElse("java 动态代理");
}
}