Java 按子类的方法名称划分的Spring声明性事务语义

Java 按子类的方法名称划分的Spring声明性事务语义,java,spring,spring-boot,spring-aop,Java,Spring,Spring Boot,Spring Aop,我试图在Spring引导应用程序中基于方法名实现不同的事务语义。据我所知,我必须通过如图所示的XML来实现这一点。这并不理想,但很好 我遇到的问题是匹配BaseService子类上的所有公共方法。我在完整的AspectJ中看到过这样的例子,但在春季aop中:它似乎不起作用 <aop:config> <aop:pointcut id="services" expression="execution(public ppi.nestup.v3.service.BaseServ

我试图在Spring引导应用程序中基于方法名实现不同的事务语义。据我所知,我必须通过如图所示的XML来实现这一点。这并不理想,但很好

我遇到的问题是匹配BaseService子类上的所有公共方法。我在完整的AspectJ中看到过这样的例子,但在春季aop中:它似乎不起作用

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

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

如果有办法通过注释或Java配置来实现这一点,那会更好,但我不确定如何使用AspectJ切入点连接到Spring事务支持中。

这是一个错误。应该是:

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

但它似乎仍然与任何方法都不匹配

我建议您阅读AspectJ教程或,以便学习语法

问题中的切入点的问题在于没有为要截取的方法指定返回类型。 第二种方法的问题是,现在您正在尝试匹配所有返回的公共方法!BaseService实例。 你可能真正想要的是

executionpublic*ppi.nestup.v3.service.BaseService+.*。。
顺便说一句,您不需要使用XML配置,您也可以通过@Aspect、@Pointcut、@Before、@Around等等以注释方式声明您的方面。

我知道您可以构建自己的AspectJ切入点和Around建议,但没有像XML那样将它们挂接到Spring的声明性事务管理中的例子。
<aop:pointcut id="services" expression="execution(public ppi.nestup.v3.service.BaseService+ *(..))"/>