2010-08-25 56 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