Spring---Spring2.0 AOP与事务配置突破

Spring1.0

<bean id="baseTxService" class="org.springframework.transaction.
interceptor.TransactionProxyFactoryBean" abstract="true">         
  <property name="transactionManager" ref="transactionManager"/>
  <property name="proxyTargetClass" value="true"/>
  <property name="transactionAttributes">
    <props>
      <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>   
      <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>      
      <prop key="save*">PROPAGATION_REQUIRED</prop>   
      <prop key="remove*">PROPAGATION_REQUIRED</prop>
    </props>
  </property>
  <property name="preInterceptors">  
    <list>
      <ref bean="methodSecurityInterceptor"/>  
    </list>
  </property>
</bean>
<bean id="bookManager" parent="baseTxService">
  <property name="target">
    <bean class="org.springside.bookstore.admin.manager.BookManager"/>
  </property>
</bean>

Spring2.0

<aop:config proxy-target-class="true">     
  <aop:advisor pointcut="execution(* *..*Manager.*(..))"
  advice-ref="txAdvice"/>
  <aop:advisor pointcut="execution(* *..*Manager.save(..))"
  advice-ref="fooAdvice"/>
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
  <tx:attributes>
    <tx:method name="save*"/>
    <tx:method name="remove*"/>
    <tx:method name="*" read-only="true"/>
  </tx:attributes>
</tx:advice>
<bean id="bookManager" class="org.springside.bookstore.commons.
service.BookManager"/>

execution(* *..BookManager.save(..))解析:
  1. 第一颗* 代表ret-type-pattern 返回值可任意,
  2. *..BookManager 代表任意Pacakge里的BookManager类。
    如果写成com.xyz.service.* 则代表com.xyz.service下的任意类
    com.xyz.service..* com.xyz.service则代表com.xyz.service及其子package下的任意类
  3. save代表save方法,也可以写save* 代表saveBook()等方法
  4. (..) 匹配0个参数或者多个参数的,任意类型
    (x,..) 第一个参数的类型必须是X
    (x,,,s,..) 匹配至少4个参数,第一个参数必须是x类型,第二个和第三个参数可以任意,第四个必须是s类型。

参考文献: [url]http://calvin.blog.javascud.org/post/182.htm[/url]

你可能感兴趣的:(spring,AOP,事务,职场,休闲)