Как настроить код для внедрения зависимостей Spring + Hibernate? - PullRequest
0 голосов
/ 31 октября 2019

У меня новичок в Java, пришедший из C ++ / C #.

Мой проект в настоящее время настроен так:

org.blah.config
  HibernateConfig.java
org.blah.customer
  Customer.java
  CustomerController.java
  CustomerService.java

HibernateConfig настраивает материал гибернации и предоставляет LocalSessionFactoryBeanbean.

CustomerController - это точка входа REST, в ней нет особой логики, она просто оборачивает CustomerService.java (или я должен называть его CustomerRepository?).

CustomerService.java (или CustomerRepository?) упаковывает содержимое БД. Вот где у меня есть:

@Autowired
private SessionFactory sessionFactory;

В моем CustomerController, если я сделаю:

private CustomerService customerService = new CustomerService();

, он не внедрит sessionFactory.

Из некоторых примеров яВыяснилось, что люди, кажется, создают bean-компонент CustomerService внутри HibernateConfig, а затем внедряют его в конструктор контроллера. Это хорошая практика? Затем я переименовал бы мой HibernateConfig во что-то более конкретное, например CustomerHibernateConfig и т. Д.

Просто пытаясь понять, как / где разместить конфигурацию и создать экземпляр службы / репозитория, чтобы его можно было внедрить в контроллер.

1 Ответ

0 голосов
/ 31 октября 2019

Это довольно сложный вопрос, чтобы ответить в нескольких словах. Вы просите целую архитектуру, которая будет сильно зависеть от выбранного шаблона проектирования, но, учитывая, что у вас есть контроллеры и сервисы, позвольте мне выразить это так. MVS - это просто упрощение и не идеальный подход. Это вызовет еще много вопросов, таких как.

  • Сколько логики должно быть в контроллере?
  • Должна ли модель содержать какую-либо логику?
  • Должно ли представление содержатьлогика?

На подобные вопросы очень сложно ответить, поскольку они очень субъективны. Тем не менее, я уже некоторое время пользуюсь Spring и дам вам совет.

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

Теперь я бы сказал, что у вас нет слоя в вашей архитектуре, я бы определенно добавил DAO, который является шаблоном проектирования, определяющим способ отделения слоя персистентности вашего приложения. Это то, что вы бы поняли как репозиторий.

С учетом сказанного вам нужен только один HibernateConfiguration и выполнить соответствующие сопоставления в каждой модели или XML-файле, относящемся к этой модели. Я бы посоветовал использовать annotations вместо файлов XML.

Если вы хотите узнать, как реализовать проект Spring, использующий Hibernate, вы можете увидеть, насколько это просто, следуя этому учебному пособию Baeldung . На этой странице есть лучшие руководства по использованию Spring.

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