让我说我有一个用两种方法'foo'和'goo'调用的bean
并且'goo'标有AOP拦截呼叫。
是否有可能在'foo'中编写任何一段代码,以便不直接调用'goo'方法,而是通过bean的代理包装器来激活它的AOP部分?
public Class Pojo{
public void foo(){
//what should I write here in order to activate 'goo' in transactional mode??
}
@Transactional
public void goo(){
}
}
答案 0 :(得分:5)
是的,但您需要通过spring代理访问它:
public Class Pojo{
@Autowired
private Pojo springProxy;
public void foo(){
springProxy.goo();
}
@Transactional
public void goo(){
}
}
答案 1 :(得分:0)
我无法使用自动连接选项。也许是因为我使用反射从foo()调用goo()(以及任何其他方法)。
所以最终解决我问题的是添加foo()代码来查找Pojo的代理bean类。并在代理bean上使用Sun invokation调用mothd
这也调用了AOP调用。
找不到更好的解决方法。