gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:24:48 24 4
gpt4 key购买 nike

我正在尝试根据 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com