我试图在Spring Boot应用程序中基于方法名实现不同的事务语义。据我所知,我必须通过XML显示here。这不太理想,但很好。
我遇到的问题是匹配我的BaseService的子类上的所有公共方法。我已经在完整的AspectJ中看到了这个例子,但是在Spring 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>
它不像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事务支持。
答案 0 :(得分:1)
我建议您阅读AspectJ教程或Spring AOP manual以了解语法。
BaseService
实例的所有公共方法。你真正想要的是
execution(public * ppi.nestup.v3.service.BaseService+.*(..))
顺便说一句,您不需要使用XML配置,您可以通过@Aspect
,@Pointcut
,@Before
,@Around
左右以注释样式声明您的方面,太
答案 1 :(得分:0)
这是一个错字。应该是:
<aop:pointcut id="services" expression="execution(public ppi.nestup.v3.service.BaseService+ *(..))"/>
但它似乎仍然没有匹配任何方法