2010-01-18 60 views
0

我有一個數據結構,表示一個包含數千個配置設置的CSV文件。該結構是一個帶有實例變量的Java類文件,用於表示文件中的記錄(即:HashMap)以及文件的狀態(錯誤,警告等)。向非Spring管理對象提供Spring管理對象?

這些類不是由Spring創建的,因爲它們具有狀態。我希望該類訪問目前由Spring管理的數據庫DAO類處理的系統配置屬性。通常當類需要這個DAO時,我使用@Autowired通過Spring注入它。但是由於我的數據結構不是由Spring管理的,CSV結構類如何訪問DAO?

創建從Spring管理bean中的數據結構時,只需通過在DAO我能想到的是唯一的方法:

CSVDataStruture c = new CSVDataStruture(dao); 
+0

您可以直接通過Spring上下文」的getBean方法指的是託管bean – 2010-01-18 13:18:30

回答

1

這些類不是由Spring創建的,因爲它們具有狀態。

是什麼讓你認爲Spring不能/不應該創建具有狀態的對象?

根據您正在嘗試做什麼(這是很難弄清楚這一點!)我會做下列操作之一:

  • 給了CVS文件參數的CSV類的getter和setter一個DAO參數,並使用Spring DI實例化它。這假定當發生彈簧佈線時文件名是可用的。

  • 使用從文件參數實例化CSV對象的方法創建工廠類。工廠類應該有一個DAO對象的getter/setter,並使用Spring DI進行實例化。

+0

感謝的方式 - 我想我會盡力選項2.我們正在做的是加載文件,驗證內容,然後加載第二個文件並區分這兩個文件。 – 2010-01-18 15:05:00

+0

#2工作得很好。 – 2010-01-18 17:24:00

3

6.8.1. Using AspectJ to dependency inject domain objects with Spring關於使用@Configurable

另一種方法是讓(在web應用程序中,這是WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext)),並使用context.getBean("name")獲取bean,但它更多的是解決方法。

+0

'@ Configurable'是去 – 2010-01-18 13:28:41