aop:pointcut 的expression 的各种表达式

任意公共方法的执行: 
execution(public * *(..)) 
任何一个以“set”开始的方法的执行: 
execution(* set*(..)) 
AccountService 接口的任意方法的执行: 
execution(* com.xyz.service.AccountService.*(..)) 
定义在service包里的任意方法的执行: 
execution(* com.xyz.service.*.*(..)) 
定义在service包或者子包里的任意方法的执行: 
execution(* com.xyz.service..*.*(..)) 
在service包里的任意连接点(在Spring AOP中只是方法执行) : 
within(com.xyz.service.*) 
在service包或者子包里的任意连接点(在Spring AOP中只是方法执行) : 
within(com.xyz.service..*) 
实现了 AccountService 接口的代理对象的任意连接点(在Spring AOP中只是方法执行) : 
this(com.xyz.service.AccountService) 
'this'在binding form中用的更多:- 请常见以下讨论通知的章节中关于如何使得代理对象可以在通知体内访问到的部分。 
实现了 AccountService 接口的目标对象的任意连接点(在Spring AOP中只是方法执行) : 
target(com.xyz.service.AccountService) 
'target'在binding form中用的更多:- 请常见以下讨论通知的章节中关于如何使得目标对象可以在通知体内访问到的部分。 
任何一个只接受一个参数,且在运行时传入的参数实现了 Serializable 接口的连接点 (在Spring AOP中只是方法执行) 
args(java.io.Serializable) 
'args'在binding form中用的更多:- 请常见以下讨论通知的章节中关于如何使得方法参数可以在通知体内访问到的部分。 请注意在例子中给出的切入点不同于 execution(* *(java.io.Serializable)): args只有在动态运行时候传入参数是可序列化的(Serializable)才匹配,而execution 在传入参数的签名声明的类型实现了 Serializable 接口时候匹配。 
有一个 @Transactional 注解的目标对象中的任意连接点(在Spring AOP中只是方法执行) 
@target(org.springframework.transaction.annotation.Transactional) 
'@target' 也可以在binding form中使用:请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内访问到的部分。 
任何一个目标对象声明的类型有一个 @Transactional 注解的连接点(在Spring AOP中只是方法执行) 
@within(org.springframework.transaction.annotation.Transactional) 
'@within'也可以在binding form中使用:- 请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内访问到的部分。 
任何一个执行的方法有一个 @Transactional annotation的连接点(在Spring AOP中只是方法执行) 
@annotation(org.springframework.transaction.annotation.Transactional) 
'@annotation' 也可以在binding form中使用:- 请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内访问到的部分。 
任何一个接受一个参数,并且传入的参数在运行时的类型实现了 @Classified annotation的连接点(在Spring AOP中只是方法执行) 
@args(com.xyz.security.Classified)

sping官网英文文档:https://docs.spring.io/spring/docs/5.1.1.RELEASE/spring-framework-reference/core.html#aop-pointcuts

  • 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、付费专栏及课程。

余额充值