Spring Web MVC и настройка hibernate - как взять свой боб в спящий режим? - PullRequest
1 голос
/ 27 октября 2010

Я новичок в Spring и концепции bean, поэтому извините, если спрашиваю об этом.Я настроил проект Java и использовал инфраструктуру Hibernate для подключения к БД (используя утилиту hibernate на eclipse, очень рекомендую, кстати).Моя основная настройка была следующей:

  1. некоторые гибернационные pojos (генерируемые инструментами Hibernate),
  2. файлы отображения гибернации (файлы hbm.xml).
  3. Конфигурация была задана в файле hibernate.cfg.xml, расположенном в моем корне пакетов.
  4. Я изначально настроил класс HibernateUtils, который получает сеанс из моего sessionFactory.
  5. некоторые классы, которые действуют как Dao - создают запросы, используя pojos и hibernateUtils для получения сеанса.

Это работало нормально с мощной инфраструктурой hibernate.Затем я перешел на проект в Spring MVC.Из различных учебных пособий, которые я прочитал, я понял, что необходимо внести некоторые изменения, чтобы все снова заработало.Основное изменение заключается в том, что Spring FW теперь загружает компоненты самостоятельно, поэтому следующее:

  1. pojos не изменилось, равно как и файлы hbm.xml
  2. Конфигурациябольше не устанавливается в hibernate.cfg.xml - Spring MVC FW загружает свой собственный LocalSessionFactoryBean, как только я объявил его в файлах XML (Spring выполняет поиск xmls как часть процесса инициализации).Поэтому я создал отдельный XML-файл с именем spring-hibernate.xml, в котором есть определение базы данных, фабричный компонент сеанса и шаблон спящего режима.Для этого в xml-файле также объявляется местоположение файлов Dao и hbm.
  3. с шаблоном гибернации, настроенным в xml, есть внедрение bean-компонента, поэтому я изменил файлы Dao, добавив getter / setterв спящий свойство шаблона.Затем с помощью этого - класс Dao может создать запрос БД.

Вся эта конфигурация работает нормально, и я могу заставить Spring FW инициализировать классы Dao (я поставил sysout только для того, чтобы подтвердить, что классы Dao внедряются с шаблоном гибернации во время запуска MVC).Теперь моя проблема - как получить доступ к созданному экземпляру бина Dao?

В моей логической части я держу бин следующим образом:

ClassPathXmlApplicationContext appContex = new ClassPathXmlApplicationContext(new String[] {"spring-hibernate.xml"});</p> <p>UserUIDDao userUIDDao= (UserUIDDao)appContext.getBean("UserUIDDao");

Проблема в том, что это НОВАЯ ссылка на недавно созданный бин ине тот, который был создан во время весеннего запуска MVC.

Итак, мои вопросы: как получить исходный бин, созданный процессом инициализации Spring?и - мои настройки правильные?

1 Ответ

0 голосов
/ 27 октября 2010

pojos не изменилось, равно как и файлы hbm.xml

Это верно.

Конфигурация больше не установлена ​​в hibernate.cfg.xml - Spring MVC FW загружает свой собственный LocalSessionFactoryBean, как только я объявил его в файлах XML (Spring выполняет поиск xmls как часть процесса инициализации).

Вы можете выбрать , чтобы использовать Spring для настройки Hibernate (но вы можете оставить свой hibernate.cfg.xml).

Итак, я создал отдельный xml-файл с именем spring-hibernate.xml, в котором есть определение БД, фабричный компонент сеанса и шаблон спящего режима. Для этого в xml-файле также объявляется расположение файлов Dao и hbm. с шаблоном hibernate, настроенным в xml, происходит внедрение bean-компонента, поэтому я изменил файлы Dao, добавив getter / setter в свойство шаблона hibernate. Затем с помощью этого - класс Dao может создать запрос БД.

Использование Spring HibernateTemplate - это один из вариантов, но вы также можете перейти без шаблона и просто ввести Hibernate SessionFactory и использовать sessionFactory.getCurrentSession().

Это фактически официально рекомендуемый подход для новых проектов, ознакомьтесь с Так что вам все равно следует использовать Spring HibernateTemplate и / или JpaTemplate ?? и javadoc HibernateTemplate.

Теперь моя проблема - как получить доступ к созданному экземпляру бина Dao?

Вы вводите его в случае необходимости (как правило, в ваших услугах).

В моей логической части я держу бин следующим образом (...)

Нет, не делай этого. Этот «подход поиска сервисов» на самом деле побеждает точку контейнера DI, такого как Spring. Сконфигурируйте Spring для внедрения ваших DAO там, где это необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...