java代理

 

http://www.blogjava.net/hadeslee/archive/2007/09/08/143641.html

http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/

http://wenku.baidu.com/view/002fad42336c1eb91a375d59.html

java的动态代理由接口、接口实现类、代理类静态工厂、还有调用处理器InvocationHandler(代理类调用接口方法的时候,实际是调用InvocationHandler.invoke(Object, Method, Object[]),也就是说代理类需要预先执行的操作就封装在invoke方法里) 。

代理类由java.lang.reflect.Proxy.newProxyInstance(ClassLoader, Class<?>[], InvocationHandler)动态生成,处理的基本过程就是动态生成字节码,装载到classloader中,并实例化,实例的特点是实现了指定接口,并且调用指定接口的时候,会把调用请求转交给InvocationHandler,让它执行代理类的代理逻辑。InvocationHandler可能需要维护一个委托对象的实例,以将调用最终转发到委托对象。

例如

 

public class DynamicSubject implements InvocationHandler {

private Object sub;

 

public DynamicSubject() {

}

 

public DynamicSubject(Object obj) {

sub = obj;

}

 

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

System.out.println(proxy.getClass().getName());

System.out.println("before calling " + method);

method.invoke(sub, args);

System.out.println("after calling " + method);

return null;

}

}

 

 

 

 

你可能感兴趣的:(java,AOP,动态代理)