<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
作用:封裝 Hibernate Session 操作,自動管理 Session 打開/關閉、異常轉換,DAO 中注入使用 us.save(), us.find() 等簡化代碼。
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
作用:平台事務管理器實現,綁定 SessionFactory,負責事務的啟動、提交、回滾、掛起/恢復。HibernateTransactionManager 專用於 Hibernate。
<aop:config>
<aop:pointcut id="bussinessService" expression="execution(public * com.huake.service.*.*(..))"/>
<aop:advisor pointcut-ref="bussinessService" advice-ref="txAdvice"/>
</aop:config>
pointcut:切入點表達式,匹配 com.huake.service 包下所有類的公共方法。advisor:將通知 (txAdvice) 應用到切入點。<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="exists" read-only="true"/>
<tx:method name="add*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
transaction-manager:引用事務管理器 Bean。tx:method:方法名匹配規則(支持通配符 *)。
exists:只讀事務,優化查詢。add*:以 add 開頭的方法,傳播行為 REQUIRED (默認,有事務加入,無則新建)。PROPAGATION_REQUIRED, read-only=false。userService.addUser())。add*,查找 txAdvice 獲取事務屬性。txManager 從 SessionFactory 獲取/創建 Session,綁定當前線程,關閉自動提交 (setAutoCommit(false))。關鍵:連接池需默認 autocommit=false (見文章 33745)。txManager 提交事務 (Session flush + commit)。rollbackFor) → txManager 回滾事務。@Transactional / AOP 配置、異常是否被捕獲吞噬、連接池 autocommit、數據庫引擎 (InnoDB)。read-only="true",Hibernate 可禁用快照/脏檢查。REQUIRED (最常用)、REQUIRES_NEW (獨立事務)、NESTED (嵌套保存點)。