首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

spring在项目中现实用途

2012-12-14 
spring在项目中实际用途1、数据库连接池的托管、自动事务管理(不用在手动关闭session,和开启事务、持久化操作

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>

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

            spring在项目中现实用途

                      如果不配置<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模式。


               

热点排行