<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-9  評論-168  文章-266  trackbacks-0

    一.AOP(常用)

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"

    xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
    <!-- 這是我們將要配置并使它具有事務性的Service對象 -->

    <bean id="fooService" class="x.y.service.DefaultFooService"/>

    <!-- the transactional advice (i.e. what 'happens'; see the <aop:advisor/> bean below) -->

    <tx:advice id="txAdvice" transaction-manager="txManager">
    <!-- the transactional semantics... -->

    <tx:attributes>
    <!-- all methods starting with 'get' are read-only -->

    <tx:method name="get*" read-only="true"/>
    <!-- other methods use the default transaction settings (see below) -->

    <tx:method name="*"/>
    </tx:attributes>
    </tx:advice>
    <!-- ensure that the above transactional advice runs for any executionof an operation defined by the FooService interface -->

    <aop:config>
    <aop:pointcut id="fooServiceOperation" expression="execution(* x.y.service.FooService.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation"/>
    </aop:config>
    <!-- ******************************************************************-->
    <!-- don't forget the DataSource -->

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@rj-t42:1521:elvis"/>
    <property name="username" value="scott"/>
    <property name="password" value="tiger"/>
    </bean>

    <!-- similarly, don't forget the (particular) PlatformTransactionManager -->

    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- other <bean/> definitions here -->

    </beans>

    我們來分析一下上面的配置。我們要把一個服務對象('fooService' bean)做成事務性的。我們想施加的事務語義封裝在<tx:advice/>定義中。<tx:advice/>把所有以 'get' 開頭的方法看做執行在只讀事務上下文中,其余的方法執行在默認語義的事務上下文中”。 其中的 'transaction-manager' 屬性被設置為一個指向 PlatformTransactionManager bean的名字(這里指 'txManager'),該bean將實際上實施事務管理。

    配置中最后一段是 <aop:config/> 的定義,它確保由 'txAdvice' bean定義的事務通知在應用中合適的點被執行。首先我們定義了 一個切面,它匹配 FooService 接口定義的所有操作,我們把該切面叫做 'fooServiceOperation'。然后我們用一個通知器(advisor)把這個切面與 'txAdvice' 綁定在一起,表示當 'fooServiceOperation' 執行時,'txAdvice' 定義的通知邏輯將被執行。

    一個普遍性的需求是讓整個服務層成為事務性的。滿足該需求的最好方式是讓切面表達式匹配服務層的所有操作方法。例如:

    <aop:config>
        <aop:pointcut id="fooServiceMethods" expression="execution(* x.y.service.*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceMethods"/>
      </aop:config>
    posted on 2009-03-30 17:37 紫蝶∏飛揚↗ 閱讀(2507) 評論(0)  編輯  收藏 所屬分類: Spring
    主站蜘蛛池模板: 亚洲精品黄色视频在线观看免费资源 | 亚洲第一精品在线视频| 特级av毛片免费观看| 在线免费一区二区| 亚洲av无一区二区三区| 国产又长又粗又爽免费视频| 日韩亚洲人成在线综合| 凹凸精品视频分类国产品免费| 亚洲国产欧美日韩精品一区二区三区| 成人午夜性A级毛片免费| 亚洲 欧洲 自拍 另类 校园| 成全视频免费高清| 亚洲国产精品无码久久98 | AV大片在线无码永久免费| 亚洲一区二区三区在线观看蜜桃| 97在线线免费观看视频在线观看| 亚洲熟妇无码爱v在线观看| 最近中文字幕2019高清免费| 亚洲一区精品视频在线| 日本一道综合久久aⅴ免费| 亚洲AV噜噜一区二区三区| 亚洲第一页综合图片自拍| 国产一级a毛一级a看免费视频| 亚洲国产一区国产亚洲| AV大片在线无码永久免费| 老司机亚洲精品影院在线观看| 中文字幕中韩乱码亚洲大片| 无码免费一区二区三区免费播放| 亚洲一级毛片中文字幕| 免费人成在线观看播放国产 | 日本亚洲视频在线| aⅴ免费在线观看| 老子影院午夜伦不卡亚洲| 亚洲三区在线观看无套内射| 四虎在线视频免费观看视频| 美女视频黄频a免费大全视频| 亚洲AV永久无码精品一百度影院| 成人性生交大片免费看无遮挡| jzzjzz免费观看大片免费| 亚洲福利视频网站| 亚洲免费日韩无码系列 |