假設我有定義爲Spring bean的幾個不同的數據源:使用Spring Bean的非Spring bean容器類
<bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/db1?user=root&password=password" />
</bean>
<bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/db2?user=root&password=password" />
</bean>
現在,我想用這些數據源豆之一,但來自非簧豆容器。我可以調用appContext.getBean(「dataSource1」),但我讀過這是不好的做法,因爲它會在代碼中創建對Spring框架的顯式依賴。有沒有更好的方法來完成這個不是特定於實現的方式?也許像DatasourceFactory.getInstance(「datasource1」)?
這是一個奇怪的請求?我意識到如果容器類是Spring bean,這很容易,因爲我可以在這種情況下使用標準的依賴注入。但這是我一直很好奇的。看起來使用依賴注入創建了一個無限循環,如果你想在一個類中使用Spring bean,那麼這個類也必須是一個bean,然後如果另一個類想要使用該bean,那麼它也必須是一個bean,等等等等。我沒有看到打破依賴注入鏈的優雅方式。
同樣,也許沒有必要打破這個鏈條,也許答案是,你的所有課程都是春豆,但我只是好奇而已。
服務定位符模式可以應用在這裏嗎?如果有人能提供一個例子嗎?謝謝。