Предположим, что у меня есть несколько различных источников данных, определенных как весенние бобы:Использование Spring Bean в Non-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>
Теперь я хотел бы использовать один из этих DataSource бобов, но из не-весна бобовый контейнер. Я мог бы вызвать appContext.getBean («dataSource1»), но я прочитал, что это плохая практика, поскольку он создает явную зависимость от весенней рамки вашего кода. Есть ли лучший способ достичь этого таким образом, который не является специфичным для реализации? Возможно, что-то вроде DatasourceFactory.getInstance («datasource1»)?
Это странный запрос? Я понимаю, что это было бы очень легко, если бы класс контейнера был фасолью Spring, поскольку я мог просто использовать стандартную инъекцию зависимостей в этом случае. Но мне это любопытно. Кажется, что использование инъекции зависимостей создает бесконечный цикл, где, если вы хотите использовать весенний боб в классе, тогда этот класс также должен быть bean-компонентом, а затем, если другой класс хочет использовать этот bean-компонент, он также должен быть bean-компонентом, И так далее, и так далее. Я не вижу изящного способа сломать цепочку инъекций зависимостей.
Опять же, возможно, нет необходимости разрывать цепочку, может быть, ответ заключается в том, что вы делаете все свои классы весенними бобами, но мне было просто любопытно.
Может ли применяться шаблон локатора обслуживания здесь? Если да, может ли кто-нибудь привести пример? Благодарю.