| package test.mylo.factory; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class MyFactory { /** * 主要是通过动态代理的方式去给service层的方法添加事物控制 * 思路,给所有的受管理的类的方法添加实务 那么 使用动态代理就可以实现 * 这里主要是模拟 * * */ public static Object getObj(Object obj){ Object proxy = Proxy.newProxyInstance(MyFactory.class.getClassLoader(), obj.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //开启事物 System.out.println("开启事务"); Object invoke = null; try { invoke = method.invoke(obj, args); System.out.println("事务提交"); } catch (Exception e) { System.out.println("事务回滚"); } return invoke; } }); return proxy; } } |
| package test.mylo.service; public interface IRoleService { public void addRole(); } package test.mylo.service.impl; import test.mylo.service.IRoleService; public class RoleServiceImpl implements IRoleService { @Override public void addRole() { System.out.println("add Role"); } } package test.mylo.service; public interface IUserService { public void addUser(); } package test.mylo.service.impl; import test.mylo.service.IUserService; public class UserServiceImpl implements IUserService { @Override public void addUser() { int a = 10 / 0; System.out.println("add User"); } } |
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |