java - Spring通过子类的方法名来声明事务语义

标签 java spring spring-boot spring-aop

我正在尝试根据 Spring Boot 应用程序中的方法名称实现不同的事务语义。据我所知,我必须通过 XML 来执行此操作,如 here 所示。 。这并不理想,但还好。

我遇到的问题是匹配 BaseService 子类上的所有公共(public)方法。我已经看过完整的 AspectJ 的示例,但在 Spring aop: stuff 中它似乎不起作用。

<aop:config>
    <aop:pointcut id="services" expression="execution(public ppi.nestup.v3.service.BaseService+.*(..))"/>

    <aop:advisor advice-ref="txAdvice" pointcut-ref="services"/>
</aop:config>

它不喜欢 aop:pointcut 表达式。错误是

java.lang.IllegalArgumentException: Pointcut is not well-formed: expecting 'name pattern' at character position 51 
execution(public ppi.nestup.v3.service.BaseService+.*(..)

如果有一种方法可以通过注释或 Java 配置来做到这一点,那就更好了,但我不确定如何使用 AspectJ 切入点连接到 Spring 事务支持。

最佳答案

我建议您阅读 AspectJ 教程或 Spring AOP manual为了学习语法。

  • 问题中切入点的问题在于您没有为要拦截的方法指定返回类型。
  • 第二个问题是,现在您正在尝试匹配所有返回(!)BaseService 实例的公共(public)方法。

你可能真正想要的是

execution(public * ppi.nestup.v3.service.BaseService+.*(..))

顺便说一句,您不需要使用 XML 配置,您可以通过 @Aspect@Pointcut@Before< 以注释样式声明方面@Around 等等。

关于java - Spring通过子类的方法名来声明事务语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49699815/

相关文章:

java - Spring MVC模型对象相关的一些疑惑

java - 原型(prototype) Bean 没有按预期 Autowiring

java - Spring Boot 中的 SQL 注入(inject)预防

Spring @ConfigurationProperties 继承/嵌套

java - 从 hibernate session 中删除对象?

java - 是否也可以删除加权图中的某些边

java - 为什么 NetBeans 找不到我的主类?

java - 我如何解析输入流到文档生成器?

java - OTP 和 SMS 网关实现涉及哪些步骤和流程

java - Hibernate多对多关系