Я до сих пор не понимаю, как избежать использования getBean () - PullRequest
3 голосов
/ 20 февраля 2012

Я новичок в Spring и прочитал много руководств по внедрению бобов.Любопытно, что в каждом примере, который я вижу, они используют getBean в методе main класса (не то, что мне нужно).Кроме того, я прочитал много форумов и вопросов, связанных с тем, как не использовать getBean , но я до сих пор не могу определить лучший подход для своего приложения.

Я занимаюсь рефакторингом веб-приложенияэто сильно связано и без шаблонов дизайна.Каждый бизнес-класс имеет соответствующий класс DAO, каждый класс DAO расширяет супер DAO, который обрабатывает соединение и другие вещи.Проблема здесь в том, что каждому DAO в конструкторе нужны некоторые параметры конфигурации базы данных, которые передаются из бизнес-класса.Я пытаюсь поместить эти параметры в компонент DBConfig и внедрить их в каждый DAO, что позволяет мне просто создать объект DAO из каждого бизнес-класса, например: dao = newmyDAO () .

Как я могу внедрить bean-компонент DBConfig в каждый DAO "автоматически"?Должен ли я использовать getBean в супер DAO?

1 Ответ

1 голос
/ 20 февраля 2012

Ваш конфиг может выглядеть так:

<bean id="daoConfig1" class="com.foo.dao.DAOConfig">
    <property name="dbUrl" value="jdbc://urlForDao1" />
    ...
</bean>

<bean id="dao1" class="com.foo.dao.DAO1">
    <constructor-arg ref="daoConfig1" />
</bean>

<bean id="business1" class="com.foo.service.Business1">
    <property name="dao" ref="dao1" />
</bean>

<bean id="daoConfig2" class="com.foo.dao.DAOConfig">
    <property name="dbUrl" value="jdbc://urlForDao2" />
    ...
</bean>

<bean id="dao2" class="com.foo.dao.DAO2">
    <constructor-arg ref="daoConfig2" />
</bean>

<bean id="business2" class="com.foo.service.Business2">
    <property name="dao" ref="dao2" />
</bean>

Или поделитесь одним daoConfig экземпляром между всеми daoX компонентами, если вы этого хотите.

Затем вы можете использовать следующую информацию для управления бизнес-логикой:

ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"beans.xml"});
Business1 b1 = (Business1) context.getBean("business1");
b1.doStuff();

Или, что еще лучше, используйте что-то вроде Spring MVC, которое может подключать бизнес-компоненты к вашим контроллерам без необходимости вызывать getBean().

...