簡體   English   中英

通過子類的方法名稱進行Spring聲明式事務語義

[英]Spring declarative transaction semantics by method name of subclasses

我正在嘗試在Spring Boot應用程序中基於方法名稱實現不同的事務語義。 至於我可以告訴我有如圖所示,通過XML做到這一點在這里 那不是理想的,但是很好。

我遇到的問題是匹配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事務支持中。

我建議您閱讀AspectJ教程或Spring AOP手冊以學習語法。

  • 問題中切入點的問題是您沒有為要攔截的方法指定返回類型。
  • 第二個問題是,現在您正在嘗試匹配所有返回(!) BaseService實例的公共方法。

您可能真正想要的是

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

和BTW,你不需要使用XML配置,你可以在注釋風格通過聲明你的方面@Aspect@Pointcut@Before@Around左右了。

這是一個錯字。 應該是:

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

但是它似乎仍然沒有匹配任何方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM