2009-08-11 2 views
0

Как потянуть весеннюю фасоль вручную? У меня довольно большое веб-приложение, и в данной службе переходный объект требует доступа к компоненту, который является специфичным для машины (информация о подключении к базе данных). Поскольку приложение работает в кластере, этот переходный объект (который может отскакивать между серверами) всегда необходимо захватить правильное соединение из текущего контекста пружины и сервера.Лучший способ вручную вытащить весенний боб?

Итак, что является лучшим способом вручную вытащить боб из весны?

ответ

1

Возможно, у вас есть сервис ApplicationContextAware, так что у вас есть доступ к самому ApplicationContext и вы можете напрямую вызвать getBean().

2
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(getServletContext()); 

Object o = ctx.getBean("dataSource"); 

Конечно, вы можете бросить боб, как это:

DataSource d = (DataSource) ctx.getBean("dataSource"); 
+1

Я нахожусь в доменной модели, но это своего рода гибрид службы/домена для моей конкретной потребности. Есть ли способ получить ServletContext без переполнения его через мой глубокий, глубокий слой обслуживания? –

1

Я хотел бы предложить инъекцию объекта, который вы пытаетесь тянуть в свой домен объект «по созданию». Это означает, что всякий раз, когда ваш доменный объект создается на определенном сервере, он будет вводиться с правильным (конкретным машиной) компонентом.

+0

Как вы это делаете? –

+0

Хотя это действительно не помогает, так как информация изменяется, когда объект домена перемещается на другой сервер. –

+0

Да, это так ... Когда bean «перемещается» на другой сервер, он воссоздается там. Как только он будет создан, ему будет добавлен другой компонент. Читайте о Spring и AOP –

0

Нужно получить информацию о подключении к базе данных? Как насчет сохранения соединения в JNDI and look it up in the bean? Предположим, что ваш сервер предоставляет его.

+0

Это будет лишний сетевой трафик. вся информация известна на сервере, где доменный объект –

+0

JNDI не имеет ничего общего с сетью ... он в основном хранит объект под известным именем, которое вы можете найти на сервере. – Nate

+0

по крайней мере в этом случае: P – Nate

Смежные вопросы