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; // 返回代理对象
}
}