Spring, Hibernate: DAO-Class: использовать всегда один и тот же объект? - PullRequest
0 голосов
/ 21 марта 2011

Я работаю с Spring 3 и Hibernate 3.6 над разработкой веб-приложения.

У меня есть DAO-класс, и я создал для него один компонент XML (названный "dao1").Каждый класс, которому требуется доступ к базе данных, получает этот объект.Это ВСЕГДА один и тот же дао-объект (scope = singleton)

Теперь мне интересно, если это рекомендуемый способ использования DAO.Было бы лучше вводить всегда разные экземпляры в других классах, и если да, то почему?Также было бы лучше разделить DAO на разные классы, содержащие всегда несколько dao-методов, возможно, специфичных для одной таблицы?

Есть ли какие-либо недостатки, когда я использую упомянутую структуру?

благодарювы!: -)

Ответы [ 2 ]

3 голосов
/ 21 марта 2011

В Hibernate / JPA дао требуется новый менеджер сессий / сущностей. Но Spring справляется с этим, внедряя прокси, который каждый раз находит новую сессию. Таким образом, наличие singleton DAO - правильный путь.

Чтобы уточнить - если ваш DAO не содержит никакого состояния (т. Е. Не имеет полей экземпляра), кроме внедренных зависимостей, тогда он может быть одноэлементным. В противном случае - нет.

0 голосов
/ 21 марта 2011

Как правило, при работе с инъекциями стоит спросить себя.

Есть ли состояние в этом компоненте / бине / объекте?

Если есть состояние, которое должно быть обработано для вызова или чего-то еще, вам нужно изменить область действия или жизненный цикл. Если нет, то вы должны настроить его как синглтон.

И вообще в классе DAO нет государства. Или не должно быть. Состояние должно быть в постоянном целевом объекте (базе данных).

Следовательно, можно с уверенностью сказать, что в этом случае вы прекрасно настроили его как Singleton.

...