2010-08-25 83 views
3

可以说我有一个用两个方法'foo'和'goo'调用的bean,'goo'用AOP拦截调用标记。
是否有可能在'foo'中写入任何一段代码以便不直接调用'goo'方法,而是通过bean的代理包装来激活它的AOP部分?通过调用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

我不能使用自动装配Autowired选项。也许是因为我使用反射来调用foo()中的goo()(以及其他任何方法)。
因此,最终解决我的问题是添加foo()代码来查找Pojo的代理bean类。并在代理bean 上使用Sun invokation调用此调用AOP调用。
找不到任何更好的解决方法。

4

是的,但你需要通过弹簧代理来访问它:

public Class Pojo{ 

    @Autowired 
    private Pojo springProxy; 

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

    @Transactional 
    public void goo(){ 
    } 
} 
+0

感谢您的快速响应。让我检查一下,我会尽快回复你。我需要检查如何使用它使用invoke(),所以我将有一个通用的解决方案 – Spiderman 2010-08-25 19:55:42

+1

自动装配将不适用于自我注入。 – 2012-08-15 17:10:53