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
动态代理的详细可见这篇:
http://www.cnblogs.com/huxi/archive/2009/12/16/1625899.html