1.         配置AOP

<!– 切面表达式匹配服务层的所有操作方法 –>
    <aop:aspectj-autoproxy />
    <aop:config>

       <aop:pointcut id=”serviceMethods” expression=”execution(* com.eway.test.TestService.*(..))”/>

       <aop:advisor advice-ref=”txadvice” pointcut-ref=”serviceMethods”/>

    </aop:config>

切入范围:execution(* com.eway.test.TestService.*(..))

<aop:advisor> 指定事务方法(通知)

<aop:pointcut>方法(通知)源于特定的类或者方法

2.         配置事务通知

<!– 通知事务 –>

    <tx:advice id=”txadvice” transaction-manager=”TxManager”>

       <tx:attributes>

           <!–需要用到的事务方法 –> 

           <!– Set query transaction timeout –>
            <tx:method name=”get*” propagation=”REQUIRED” timeout=”60″ read-only=”true” />
            <tx:method name=”has*” propagation=”REQUIRED” timeout=”60″ read-only=”true” />
            <tx:method name=”query*” propagation=”REQUIRED” timeout=”60″ read-only=”true” />
            <tx:method name=”search*” propagation=”REQUIRED” timeout=”60″ read-only=”true” />
            <!– Set update transaction timeout: 2 min –>
            <tx:method name=”*” propagation=”REQUIRED” timeout=”120″ rollback-for=”ItemExistsException” />

       </tx:attributes>

    </tx:advice>

3.         配置事务

<!– 配置事务 –>

    <bean id=”TxManager”>

    <property name=”dataSource” ref=”DataSource”></property>

    </bean>

4.         配置数据源:省略

Spring事务和EJB事务相比

l         Spring声明式事务在任何环境下都可以使用,只需要修改配置文件,它就可以和JDBC,JDO,Hibernate或和其他的事务机制一起使用,而EJB的CMT(声明式事务管理)是绑定在JTA上

l         Sprin提供了回滚规则,而EJB没有

l         Sprin允许通过AOP(切面)定制事务,可以随意添加任何事务通知,而EJB除了通过setRollbackOnly(),就没有办法影响容器管理事务了

l         EJB事务可以跨越远程,而Sprin不提供

对Spring事务总结:关于spring的事务配置由三个部分组成,分别是:DataSource(数据源),TransactionManager(事务管理器),代理机制。无论哪种事务配置方式,一般变化的是代理机制这部分。

对Spring的理解

    Spring是一个轻量级的控制反转(IOC)和面向切面编程的框架

        IOC: 将类的主动权移交给接口,通过容器实例化对象(容器通过反射机制创建对象)

        AOP:在修改源代码的情况下给系统加一个新的功能或者技术(例如:一个登录程序,现在想记录登录日记,在不修改源代码的基础上,使用AOP写一个方法(称为通知)可以实现)

同时Spring提供支持事务,校验等等,使开发人员更容易编写更干净,更容易管理,更方便测试的代码。