JDK的动态署理总结

JDK的动态代理总结

jdk的动态代理是基于接口的,必须实现了某一个或多个任意接口才可以被代理 ,并且只有这些接口中的方法会被代理。

我们需要写一个自定义的调用处理器(实现接口java.lang.reflect.InvocationHandler ),然后使用类java.lang.reflect.Proxy中的静态方法生成代理类,并把这个代理类当做原先的类使用就可以。

 

1.返回一个与业务代表对象有相同接口的代理对象

public static Object decorate(Object delegate) {
return Proxy.newProxyInstance(delegate.getClass().getClassLoader(),
delegate.getClass().getInterfaces(), new XAWrapperHandler(delegate));
} 

 2.包装业务代表对象所有的业务方法

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = null;
session = SessionFactory.getSession();
try {
Transaction tx = session.beginTransaction();
//调用原始业务对象的业务方法
result = method.invoke(delegate, args);
session.flush();
tx.commit();
} catch (Throwable t) {
ta.rollback();
}
return result;
}

 3
JDK的动态署理总结
 

 
JDK的动态署理总结


JDK的动态署理总结

 

动态代理的详细可见这篇:

http://www.cnblogs.com/huxi/archive/2009/12/16/1625899.html