2009-10-08 24 views
0

最近,我在嘗試清理我的spring配置時遇到了一個非常令人困惑的錯誤。這個例外是從第三方圖書館內部引起的,基本上是一個混淆的NPE。根據需要標記第三方類屬性(Java/Spring)

我希望能夠做到的是配置spring來要求這個類上的特定字段是必需的,但我不想構建庫的自定義版本。

一個明顯的解決方案是在那裏繼承和標記setter,但出於好奇,我想知道是否有一種簡單的方法可以在春季做到這一點,而無需做班級雜耍。

Java 6u10,Spring 2.5。

+0

說明:我正在嘗試將@Required註釋添加到我無權訪問的特定setter,而不是注入特定的依賴項。這是類元數據的問題,而不是初始化。 – liam 2009-10-08 21:53:11

+0

@liam - 我明白你現在想要什麼,出於某種原因,你提到的子類把我拋棄了。請參閱我的答案中的更新。 – ChssPly76 2009-10-08 22:54:14

回答

2

爲您的對象寫一個FactoryBean。子類化不是必需的。

更新(基於評論/問題澄清)

我終於明白你現在要做的:-)沒有在春季任何你想要什麼,會做什麼,但它是相當微不足道來寫。基本上,您正在考慮擴展org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor,不同之處在於您要靜態指定bean類/方法名稱,而不是依賴註釋。您需要覆蓋isRequiredProperty()方法。

+0

也許我錯過了一些東西,但我不太明白這會有什麼幫助。具體來說,我問的是向特定方法添加@Required,而不是將字段初始化爲特定值。我不明白如何編寫一個工廠將讓我定義方法的元數據。 – liam 2009-10-08 21:56:44

+0

@Required不是確保設置特定屬性的唯一方法;您可以在初始化回調中手動執行此操作,您可以從FactoryBean或通過子類化獲得,也可以按照Gandalf的建議實施InitializingBean。或者你可以用@Required在FactoryBean上註釋相應的setter。 – ChssPly76 2009-10-08 22:10:18

+0

我明白我可以手動測試字段,我真的沒有看到編寫工廠的好處,或者讓一個構造函數完成工作而不是簡單的子類。理想情況下,我找的,我可以成立一個部分我春天CONFIGS其中一種方式: - 我給一個完全合格的類名和方法模式的列表 彈簧施加相同的邏輯,並打印了同樣的錯誤因爲使用@Required。 如果我發現我的應用程序需要的類的其他屬性,我可以添加它們來執行啓動檢查。 我猜測沒有。不過謝謝你的建議。 – liam 2009-10-08 22:29:02

1

我會寫,擴展您的CURENT類並實現在春季InitalizingBean接口偉馳檢查您指定的字段的類。

+0

子類,並標記方法爲@Required就是我計劃,我特別想知道是否有通過CONFIGS所需的標記方法/類的AOP風格的方式。 spring/hibernate允許你爲事務定義切入點。 – liam 2009-10-08 22:08:26

+0

我正在與我最初的小瑣事。一般情況下,我一直在尋找一種方式來紀念根據需要在不繼承或編譯的jar的定製版本的第三方制定者。還是)感謝你的建議。 – liam 2009-10-08 22:38:07