// 业务接口 public interface Service ... { //两个方法声明 public void method1(); public void method2();} // 业务逻辑组件,实现Service接口 public class ServiceImpl implements Service ... { //实现接口实现的两个方法 public void method1() ...{ System.out.println("执行业务方法1"); } public void method2() ...{ System.out.println("执行业务方法2"); }} // 负责产生业务逻辑组件的工厂 public class ServiceFactory ... { //将工厂设置成单态模式 private static ServiceFactroy sf; //业务逻辑组件 private Service service; //构造器私有,保证最多只能产生一个工厂 private ServiceFactory() ...{ } //实例化工厂的方法 public static ServiceFactory instance() ...{ if (sf == null) ...{ sf = new ServiceFactory(); } return sf; } //获取业务逻辑组件的方法 public Service getService(String impl) ...{ if (impl.equals("one")) ...{ if (service == null) ...{ service = new ServiceImpl(); } } return null; }} // 代理处理器,实现InvocationHandler public class ProxyHandler implements InvocationHandler ... { //target是被代理的目标对象 private Object target; //invoke方法是实现InvocationHandler接口必须实现的方法, //该方法会在目标对象方法被调用时,自动被调用 public Object invoke(Object proxy, Method method, Object[] args) throws Exception ...{ Object result = null; if (method.getName().equals("method1")) ...{ System.out.println("开始事务..."); result = method.invoke(target, args); System.out.println("提交事务..."); } else ...{ result = method.invoke(target, args); } return result; } public void setTarget(Object o) ...{ this.target = o; }} // 负责生成动态代理的代理工厂 public class MyProxyFactory ... { public static Object getProxy(Object object) ...{ //代理处理类实例 ProxyHandler handler = new ProxyHandler(); //把该Service实例委托给代理操作 handler.setTarget(object); //第一个参数是用来创建动态代理的ClassLoader对象,只要该对象能访问 //Service接口即可。第二个参数表明该代理所实现的所有接口,第三个参数 //是代理的处理类 return Proxy.newProxyInstance(object.getClass().getClassLoader(), object. getClass().getInstance(), handler); }} public class TestService ... { public static void main(String[] args) ...{ Service service = null; //通过ServiceFactory生成Service实例,该Service实例是需要代理的目标对象 Service targetObject = ServiceFactory.instance().getService("one"); //根据目标对象,生成代理对象 Object proxy = MyProxyFactory.getProxy(targetObject); //判断代理对象是否实现Service接口 if (proxy instanceof Service) ...{ //将代理对象转换Service实例 service = (Service)proxy; } //通过代理对象执行method1 service.method1(); service.method2(); }} ==> 开始事务...执行业务方法1提交事务...执行业务方法2