基于接口动态代理进行事务改造service源码
2017-09-21 20:21
183 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kingvin_xm/article/details/78056477
package cn.myhome.factory; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import cn.myhome.service.ICustomerService; import cn.myhome.service.impl.CustomerServiceImpl; import cn.myhome.utils.HibernateUtil; public class BeanFactory { public static ICustomerService getCustomerService() { final CustomerServiceImpl customerService = new CustomerServiceImpl();// 真实对象 // 返回的代理对象 ICustomerService proxyCs = (ICustomerService) Proxy.newProxyInstance( customerService.getClass().getClassLoader(), customerService .getClass().getInterfaces(), // 增强 new InvocationHandler() { // 事务控制 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object rtValue = null;// 返回值 try { // 开启事务 HibernateUtil.beginTransaction(); // 调用目标方法 rtValue = method.invoke(customerService, args); // 提交 HibernateUtil.commit(); } catch (Exception e) { // 出现异常事务回滚 HibernateUtil.rollback(); e.printStackTrace(); } /* * 关闭,HIbernate的处理, 如果会话绑定在同一线程上,默认必须开启事务。 * sesion生命周期,随线程启动而启动,随线程关闭而关闭 */ // 返回值 return rtValue; } }); return proxyCs; // 返回代理对象 } }
相关文章推荐
- Java事务(五) - 使用动态代理改造
- 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。
- 【转载】MyBatis Mapper 接口如何通过JDK动态代理来包装SqlSession 源码分析
- 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。
- 基于jdk动态代理的实现与源码解析
- Spring -- <tx:annotation-driven>注解基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)的区别。
- 【Java EE 学习 24 下】【注解在数据库开发中的使用】【反射+注解+动态代理在事务中的应用service层】
- 2014-07-16 Java Web的学习(13)-----DBUtil&基于DBUtil的事务处理(动态代理AOP)
- MyBatis Mapper 接口如何通过JDK动态代理来包装SqlSession 源码分析
- 最简单的动态代理实例(spring基于接口代理的AOP原理)
- 为什么动态代理只能基于接口?
- 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务
- 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。
- 【框架】[Spring] 基于Spring框架的Web应用演示(附带cglib工具进行动态代理)
- MyBatis Mapper 接口如何通过JDK动态代理来包装SqlSession 源码分析
- 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。
- 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。
- Spring AOP源码分析(三):基于JDK动态代理和CGLIB创建代理对象的实现原理
- 由service层接口有什么用?引申到基于JDK原生和CGLIB动态代理实现spring事务管理的机制的思考
- 【反射+注解+动态代理在事务中的应用service层】