Home
JavaEE
Java GUI
Framework
DHtml
Android
插画
教程下载

ATOM 2.0   RSS 2.0
Add to iGoogle Add to Live.com
  • 今天终于收到金山快盘的邀请码
  • 利用最短ie判断在不同浏览器上播放背景音乐
  • 对插画方面的一点感受与回忆
  • 网上看到的两个死里逃生的图片,记录一下
  • 今天开通了糖果社区,附几个激活码
  • 终于可以实现我的多个微博实时同步了
  • 备案和现场拍照就是对站长们的瞎折腾
  • 对Android在互联网应用开发上的纠结
  • 收藏夹中的书签都没了,决定写一个自已的书签管理器
  • 测试自已整理的本机的webapps客户端发送博文能否成功。
  • 今天开通了糖果社区,附几个激活码
  • 终于可以实现我的多个微博实时同步了
  • 备案和现场拍照就是对站长们的瞎折腾
  • 昨天借用飞姐的佳作做的一个浪漫爱情网页
  • 有几个腾讯微博的邀请码(实时更新)
  • BB的网站移到了GAE-JAVA上了
  • 一个基于GAE Python Web.py和JQuery的留言本程序
  • 类许愿墙的一个告白网站和一个电子书网站
  • Android中用Bitmap获取图片中某个区域的图象
  • 对暴力破解带密码的QQ相册的可行性分析
  • 对淘宝web旺旺版一些通讯接口的研究

利用AOP拦截器(Interceptor)取代Template

posted by David Chen at July 20, 2009, 1:49 AM    

        Spring的AOP HibernateInterceptor是作为HibernateTemplate的替换, 它在一个委托的try/catch块中直接写Hibernate代码, 以及在application context中的一个interceptor定义,从而代替callback的实现。下面演示了在application context中DAO,interceptor以及proxy定义,同时还有一个DAO方法的具体实现:
<beans>
    <bean id="myHibernateInterceptor"
class="org.springframework.orm.hibernate.HibernateInterceptor">
    <property name="sessionFactory">
        <ref bean="mySessionFactory"/>
    </property>
</bean>

<bean id="myProductDaoTarget" class="product.ProductDaoImpl">
    <property name="sessionFactory">
        <ref bean="mySessionFactory"/>
    </property>
</bean>

<bean id="myProductDao" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="proxyInterfaces">
        <value>product.ProductDao</value>
    </property>
    <property name="interceptorNames">
        <list>
            <value>myHibernateInterceptor</value>
            <value>myProductDaoTarget</value>
        </list>
    </property>
</bean>
</beans>
public class ProductDaoImpl extends HibernateDaoSupport implements ProductDao {
    public List loadProductsByCategory(final String category) throws MyException {
        Session session = SessionFactoryUtils.getSession(getSessionFactory(), false);
            try {
                List result = session.find("from test.Product product where product.category=?",category, Hibernate.STRING);
                if (result == null) throw new MyException("invalid search result");
                return result;
            }
                catch (HibernateException ex) throw SessionFactoryUtils.convertHibernateAccessException(ex);
            }
    }
    这个方法必须要有一个HibernateInterceptor才能工作。 getSession方法中的”false”标志为了确保Session已经存在, 否则SessionFactoryUtils会创建一个新的。如果线程中已经存在一个 SessionHolder比如一个HibernateTransactionManager事务 ,那SessionFactoryUtils 就肯定会自动参与进来。HibernateTemplate 在内部使用SessionFactoryUtils, 他们是一样的底层结构。HibernateInterceptor最主要的优点是允许在数据访问代码中抛出checked应用异常,而HibernateTemplate在回调中严格限制只能抛出未检查异常。 值得注意的是我们可以把各种check以及抛出应用异常推迟到回调之后。 Interceptor的主要缺点是它需要在context进行特殊的装配。HibernateTemplate的简便方法在很多场景下更简单些
Labels:   Java    Framework    Spring  
Trackback:   http://cwq.iou1314.com/aop-Interceptor-template_a31
微博最近更新
[2010-07-31 16:33]    今天下午又将昨天赢的哎齐出来了,郁闷,一进一出,要有入没出才行啊。
[2010-07-31 07:40]    昨晚又去啊泄度开台,呢次赢左差唔多3旧水,下周星期一请假,回郁南去转社保和入党资料。
本站内的任何文章,只代表个人意见或学习所用,如有版权声明,请尊重作者的劳动成果,在转载时请保留原始链接并注明出处。
Power by David's PhpCms, © 2007 - 2010 CWQ.IOU1314.COM All Rights Reserved.