调用Bean内方法来触发代理AOP

3
假设我有一个名为的bean,其中包含两个方法'foo'和'goo',并且'goo'标记为AOP拦截调用。
是否可能在'foo'中编写任何代码片段,以便不直接调用'goo'方法,而是通过bean的代理包装器调用'goo'方法,以激活其中的AOP部分?
public Class Pojo{

  public void foo(){
    //what should I write here in order to activate 'goo' in transactional mode??
  }

  @Transactional
  public void goo(){
  }
}
2个回答

5

是的,但是您需要通过Spring代理访问它:

public Class Pojo{

  @Autowired
  private Pojo springProxy;

  public void foo(){
    springProxy.goo();
  }

  @Transactional
  public void goo(){
  }
}

非常感谢您的迅速回复。让我来确认一下这个问题,然后再给您答复。我需要检查一下如何使用invoke(),这样可以找到一个通用的解决方案。 - Spiderman
这个在Spring Boot 2.6中不再起作用(除非你提供spring.main.allow-circular-references=true)。 - gavenkoa

-1

我无法使用@Autowired选项。可能是因为我正在使用反射来从foo()调用goo()(以及其他任何方法)。
所以最终解决我的问题的方法是在foo()中添加代码,将查找Pojo的代理bean类,并使用Sun invokation在代理bean上调用该方法 这也会触发AOP调用。
找不到更好的解决办法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接