代理模式的进一步理解(动态代理)
动态代理:(前提是要有接口) CGLIB实现的动态代理:不需要有接口 业务层的动态代理实例: package 动态代理设计模式; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class ServiceProxy implements InvocationHandler{ private Object target ;//真实对象 public Object bind(Object target){//返回代理对象 this.target=target;//绑定真实对象 return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(), this); } /** * 代理类代理真实主题的操作方法 * @param proxy:代理类的对象 * 需要真实主题对象来执行真实的主题任务 */ public void ready(){ System.out.println("关闭自动提交事务"); } public void commit(){ System.out.println("提交事务"); } public void rollback(){ System.out.println("回滚事务"); } public void close(){ System.out.println("关闭数据库连接"); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result=null; if(method.getName().startsWith("do")){ this.ready(); try{ result=method.invoke(this.target, args); this.commit(); }catch(Exception e){ this.rollback(); }finally{ this.close(); } }else{ result=method.invoke(this.target, args); } return result;//返回真实对象操作的结果 } }