Spring事务管理—aop:pointcut expression解析

先来看看这个spring的配置文件的配置:

 

  <!-- 事务管理器 -->
 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>


 <!-- 配置事务的传播特性 -->
 <tx:advice id="txAdvice" transaction-manager="transactionManager">
  <tx:attributes>
   <tx:method name="get*" propagation="REQUIRED" read-only="true" />
   <tx:method name="del*" propagation="REQUIRED" />
   <tx:method name="save*" propagation="REQUIRED" />
   <tx:method name="update*" propagation="REQUIRED" />
  </tx:attributes>
 </tx:advice>


 <!-- 配置事务拦截器拦截哪些类的哪些方法,一般设置成拦截Service -->
 <aop:config>
  <aop:pointcut expression="execution(* com.xy.service.*.*(..))"
   id="allDaoMethod" />
  <aop:advisor advice-ref="txAdvice" pointcut-ref="allDaoMethod" />
 </aop:config>


表示com.xy.service包下的所有方法为为事务管理。

 

execution(* com.aptech.jb.epet.dao.hibimpl.*.*(..)) 

 

这样写应该就可以了 这是com.aptech.jb.epet.dao.hibimpl 包下所有的类的所有方法。。

第一个*代表所有的返回值类型 

第二个*代表所有的类

第三个*代表类所有方法 最后一个..代表所有的参数。

 

 

下面给出一些常见切入点表达式的例子:

  • 任意公共方法的执行:

    execution(public * *(..))
    
  • 任何一个以“set”开始的方法的执行:

    execution(* set*(..))
    
  • AccountService 接口的任意方法的执行:

    execution(* com.xyz.service.AccountService.*(..))
    
  • 定义在service包里的任意方法的执行:

    execution(* com.xyz.service.*.*(..))
    
  • 定义在service包或者子包里的任意类的任意方法的执行:

    execution(* com.xyz.service..*.*(..))

--------------------- 本文来自 woshixuye 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/woshixuye/article/details/7212238?utm_source=copy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
事务类是用来管理数据库事务的,通常包括事务的开始、提交、回滚等方法。下面是一个示例的事务类: ```java import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; public class TransactionManager { private DataSource dataSource; public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } public void beginTransaction() throws SQLException { Connection connection = dataSource.getConnection(); connection.setAutoCommit(false); } public void commitTransaction() throws SQLException { Connection connection = dataSource.getConnection(); connection.commit(); connection.setAutoCommit(true); connection.close(); } public void rollbackTransaction() throws SQLException { Connection connection = dataSource.getConnection(); connection.rollback(); connection.setAutoCommit(true); connection.close(); } } ``` 上面的事务类包括了三个方法,分别是beginTransaction()、commitTransaction()、rollbackTransaction(),用于开始事务、提交事务、回滚事务。这里的数据源使用了javax.sql.DataSource接口,可以通过Spring进行注入。 接下来,我们可以将事务类使用AspectJ进行AOP编程。首先,在Spring配置文件中加入AspectJ的命名空间: ```xml xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd" ``` 然后,定义一个切入点,用于在需要进行事务管理的方法上进行拦截: ```xml <aop:config> <aop:pointcut id="transactionalMethods" expression="execution(* com.example.service..*(..))"/> </aop:config> ``` 上面的切入点表达式表示拦截com.example.service包及其子包下的所有方法。 接着,定义一个切面,用于在拦截的方法执行前后进行事务管理: ```xml <aop:config> <aop:pointcut id="transactionalMethods" expression="execution(* com.example.service..*(..))"/> <aop:aspect ref="transactionManager"> <aop:before method="beginTransaction" pointcut-ref="transactionalMethods"/> <aop:after method="commitTransaction" pointcut-ref="transactionalMethods"/> <aop:after-throwing method="rollbackTransaction" throwing="java.sql.SQLException" pointcut-ref="transactionalMethods"/> </aop:aspect> </aop:config> ``` 上面的切面引用了事务管理类TransactionManager,并在拦截的方法执行前后进行了事务管理。其中,before元素表示在方法执行前调用beginTransaction()方法,after元素表示在方法执行后调用commitTransaction()方法,after-throwing元素表示在方法抛出异常时调用rollbackTransaction()方法。 最后,将事务管理类注入到Spring容器中: ```xml <bean id="transactionManager" class="com.example.TransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> ``` 上面的代码将TransactionManager类注入到容器中,并设置了数据源dataSource。这样,在需要进行事务管理的方法中,就可以使用TransactionManager类进行事务管理了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值