2013-06-04 37 views
1

首先,我嘗試xml配置:聲明父母的AspectJ

<aop:aspect> 
     <aop:declare-parents types-matching="DBOperations.ILearningData+" 
          implement-interface="DBOperations.ISaveResults" 
          delegate-ref="saverExtension"/> 
</aop:aspect> 

和它的作品好。

現在我儘量讓AspectJ中,至極也應該這樣做:

​​

其中TSaveResults相同豆「saverExtension」。

我跑我的代碼:

... 
@Value("#{learningData}") 
protected ILearningData saver; 
    ... 
    ((ISaveResults)saver).saveResults(); 

並且得到錯誤:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: sun.proxy.$Proxy12 cannot be cast to DBOperations.ISaveResults 

什麼是我的AspectJ的問題呢?

我也試過這個代碼unsuccessfull:

public aspect ASaveResults { 

public ASaveResults() { } 

declare parents : ISaveResults implements ILearningData; 

public void saveResults() { 
    System.out.println("saver aspect"); 
} 

}

+0

你在Spring xml中啓用了AOP自動檢測嗎?它看起來像編織沒有發生...... –

+0

我已經:

+0

此外aspectj與周圍和之前連接良好。所以我認爲我的問題是ASaveResults –

回答

2

你使用什麼樣的有核AspectJ的,所以如果你想要使用Spring AOP,但沒有XML配置,那麼這是你應該什麼做(未測試):

@Aspect 
public class ASaveResults { 

    @DeclareParents(value="ISaveResults") 
    public static ILearningData interf; 

    public void saveResults() { 
     System.out.println("saver aspect"); 
    } 
} 
+0

你的方式我認爲也很好。但我找到了我想要的解決方案: –

+0

非常感謝:) –

+0

歡迎:) –

1
public aspect ASaveResults {  

public ASaveResults() { } 

declare parents : LearningData extends TSaveResults; 

} 

其中LearningData和TSaveResults - 類。所以,現在TSaveResults擴展了LearningData - 這是我的目標