1. 程式人生 > 實用技巧 >Spring學習筆記(八)-事務控制-基於AspectJ實現和與Web結合

Spring學習筆記(八)-事務控制-基於AspectJ實現和與Web結合

Spring學習筆記(八)-事務控制-基於AspectJ實現和與Web結合

<!-- spring中基於XML的宣告式事務控制配置步驟
            1、配置事務管理器
            2、配置事務的通知
                    此時我們需要匯入事務的約束 tx名稱空間和約束,同時也需要aop的
                    使用tx:advice標籤配置事務通知
                        屬性:
                            id:給事務通知起一個唯一標識
                            transaction-manager:給事務通知提供一個事務管理器引用
            3、配置AOP中的通用切入點表示式
            4、建立事務通知和切入點表示式的對應關係
            5、配置事務的屬性
                   是在事務的通知tx:advice標籤的內部
    -->
<!-- 配置事務管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

<!-- 配置事務的通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <!-- 配置具體的業務方法的屬性-->
    <tx:attributes>
        <!--name:業務方法的名稱,1.具體的業務方法;2.帶部分萬用字元;3.*-->
        <tx:method name="*" propagation="REQUIRED" read-only="false"/>
        <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
    </tx:attributes>
</tx:advice>

<!-- 配置aop-->
<aop:config>
    <!-- 配置切入點表示式-->
    <aop:pointcut id="pt1" expression="execution(* com.Xxx.service.impl.*.*(..))"/>
    <!--建立切入點表示式和事務通知的對應關係 -->
    <aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/>
</aop:config>
Spring與Web
  • 在web專案中,Spring容器應只建立一次,並被所有Servlet共享

    • 解決方法:使用ServletContextListener,其存在兩個方法分別在web專案啟動和關閉時執行,且建立好的容器放置於web應用的ServletContext域中

    • ContextLoaderListener,由Spring提供的ServletContextListener實現類

    • 使用方法:

      • Maven配置

      • <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.3.1</version>
        </dependency>
        
      • web.xml配置

      • <!--上下文引數,用於給監聽器提供引數,自定義配置檔案的路徑-->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </context-param>
        <!--建立容器時預設載入WEB-INF目錄下的applicationContext.xml-->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>