2010-11-17 60 views
1

我在一個同事的盒子上收到一個奇怪的錯誤。 CGLib自動代理Spring AOP日誌記錄的服務類,並且在運行時,它說cglib代理類的fastclass上的'unresolved編譯錯誤:必須覆蓋超類方法'。cglib編譯器jdk合規

在違規類中,我使用@override註解當我實現一個接口,並且我知道它在jdk 1.6中支持但不是1.5 CGLib是自動代理的實現類

但是,它在jdk_1.6_17的框中工作正常,但沒有在他的jdk_1.6_10上

但是,他可以使用maven使用相同的jdk正確地編譯項目 刪除@Override註釋修復了r沒有時間cglib錯誤,但這很奇怪的權利?

cglib用於自動代理的編譯器是什麼,這可能是jdk_1.6_10中的一個錯誤,或者是否有其他東西丟失?

使用Spring 3.0.4,JBoss的5.10,春季安全3.0.3

基本上,類彈簧安全實現AuthenticationUserDetailsS​​ervice來做。

有問題的方法簽名:

@Override 
public UserDetails loadUserDetails(Authentication auth) throws UsernameNotFoundException; 

的UserDetails是彈簧安全接口,所以是認證。

+0

你可以顯示導致問題的方法的一些源代碼?這種方法是使用泛型還是被聲明爲返回重寫方法的子類型返回類型(協方差)? – 2010-11-17 15:06:41

+0

添加它,沒有那樣,它實際上返回一個UserDetails的自定義實現,但它被聲明爲返回UserDetails。 – gtrak 2010-11-17 15:19:24

回答

0

好吧,算出來。我曾將cglib 2.2引入到pom.xml中,並且spring-flex引入了自2005年起的2.1_03。出於某種原因,我的方框最終使用了新方法,而我的同事最終使用了舊方法。

任何人都知道爲什麼某個特定的人首先被加載?

+0

它是有效的隨機數(即有一種算法,但不值得嘗試使用它)。至少對於cglib來說,常見的解決方案似乎是將自己的副本分發到您自己的項目名稱空間中。 – 2011-06-21 08:50:01