您的位置:首页 > 其它

基于接口动态代理进行事务改造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; // 返回代理对象
}

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐