刘蕴学 发表于 2012-6-29 22:50
10几行是吧?恭候大驾,另外针对楼主的问题,参见spring框架,反射javabean部分的aop实现 ...
本人不才,刘童鞋拿着以前写的代码,我也只好也拿出很久前写的代码了,相信聪明的你一看就明白。虽然不如刘童鞋的精彩,但也是一种动态的最佳实践。
另外有两点,
刘童鞋放出的代码,似乎是某套题目中的节选,出现在本论坛难免让人不联想到是某套题,大家懂的。放出来还是不太好。
还有就是,刘童鞋显然是已经拿到了锤子,但是也不能满眼都是钉子,在决定一种方案的时候,还是要考虑考虑什么才是本问题的关键点,什么才是这种方案的最佳实践。
关于这么点事情,纠结过来,纠结过去,让大家见笑了,还请见谅。:)- private DaoFactory() {}
- private static DaoFactory factory = new DaoFactory();
- public static DaoFactory getInstance() {
- return factory;
- }
- public EmployeeDao getEmployeeDao() {
- return (EmployeeDao) Proxy.newProxyInstance(DaoFactory.class.getClassLoader(), EmployeeDaoHibernateImpl.class.getInterfaces(), new InvocationHandler() {
- Session session = null;
- Transaction transaction = null;
- @Override
- public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {
- EmployeeDao employeeDao = new EmployeeDaoHibernateImpl();
- try {
- session = ThreadLocalUtil.getSession();
- transaction = session.beginTransaction();
-
- Object object = method.invoke(employeeDao, args);
-
- transaction.commit();
-
- return object;
-
- } catch(Exception e) {
- if(transaction!=null)
- transaction.rollback();
- throw new RuntimeException(e);
- } finally {
- if(session != null) {
- ThreadLocalUtil.closeSession();
- }
- }
- }
- });
- }
复制代码 |