我試圖使用Spring AOP將行爲注入到對象中。目標對象有一個單一的方法,它是這種新行爲的連接點。該方法還有一個自定義註釋,我希望能夠從其他不相關的代碼中讀取。因爲我的類沒有實現接口,所以Spring使用CGLIB動態地爲目標對象創建子類。生成的子類似乎沒有將註釋添加到原始類中。SpringAOP生成的動態子類缺少註釋
我嘗試將@Inherited註釋添加到自定義註釋中,但沒有運氣。原來@Inherited只適用於類。這表明Spring將不得不將我的註解明確應用於子類中的重寫方法。
編輯:我找到了解決方法和一些問題的更多信息。它看起來像CGLib的人都知道這個問題。註釋被視爲像Java中的實現(而不是像方法簽名的一部分)。重寫方法必須重新聲明註釋。 CGLib不會這樣做(故意通過事物的聲音)。
我的解決方法是改變我的反射邏輯。在我尋找傳遞給我的類的註釋方法的地方,我現在看看這個類,它是超類。我最終找到使用超類的方法(在代理的情況下),但是當我調用方法時,應用常規多態。這使得一些醜陋的反射代碼(比平常更醜陋)。它也似乎不應該補償我的代碼中的SpringAOP實現細節。
看來Spring似乎應該提供一個更清晰的方法來處理這個問題。如果有人有其他建議,他們將不勝感激。
我建議在Spring論壇上提問,你可能會在那裏得到一個很好的答案。 – skaffman 2009-07-01 15:18:45