spring在項目中實際用途


1、數據庫連接池的托管、自動事務管理(不用在手動關閉session,和開啟事務、持久化操作、提交事務)

2、aop的事務代理


spring管理事務一共有兩種方式:

1、

            <!-- 配置session工廠 -->
            <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
                <property name="configLocation">
                    <value>classpath:Hibernate.cfg.xml</value>
                </property>
            </bean>
            <!-- 配置hibernateTemplate -->
            <bean name="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
                <!-- 讀取sessionFactory -->
                <property name="sessionFactory" ref="sessionFactory"></property>
            </bean>
            <!-- 聲明事務 -->
            <bean name="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
                <!-- 讀取sessionFactory -->
                <property name="sessionFactory" ref="sessionFactory"></property>
            </bean>
            <!-- 開啟注解事務 -->
            <tx:advice id="txAdvice" transaction-manager="txManager">
                <tx:attributes>
                    <tx:method name="*"/>
                    <tx:method name="query*" read-only="true"/>
                </tx:attributes>
            </bean>

             <!--注解可以被繼承,可以添加到接口上

           

                      如果不配置<tx:advice transaction-manager="txManager"><!-- 通知注解事務管理-->

                                           <tx:attributes>
                                                 <tx:method name="*"/>
                                                  <tx:method name="query*" read-only="true"/>
                                         </tx:attributes>

                       則上圖中@Transactional注解也不會起作用

              -->

2、為單個bean配置事務(aop事務代理進行自動事務管理,自動數據庫連接關閉)

              <!-- 配置一個業務邏輯Bean -->
             <bean id="test" class="com.spring.tranProxy.PersonDaoImpl">
                     <property name="ds" ref="dataSource" />
             </bean>
    
              <!-- 為業務邏輯Bean配置事務代理 -->
               <bean id="testTrans"
                           class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
                            <!-- 為事務代理工廠Bean注入事務管理器 -->
                                    <property name="transactionManager" ref="transactionManager" />
                                   <property name="target" ref="test" />
                                  <!-- 指定事務屬性 -->
                            <property name="transactionAttributes">
                                   <props>
                                          <prop key="*">readOnly</prop>
                              </props>
                    </property>
           </bean>


spring對數據庫session的管理

              

觀點:

1.使用getSession()返回session有兩種情況。
   a.當前線程有存在session,就直接返回。
   b.當前線程中不存在session就重新創建一個。

如果spring配置了事務,那么session就不必關閉,在事務完成之后將被自動關閉。如果沒有參與事務那就要調用session.close()關閉。

2.getSession()拿到的Session無論是否參與事務,Spring都不負責關閉,除非使用OpenSessionInView模式。


               


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com