Вредно ли объявление нескольких экземпляров одного класса / DAO в проекте Spring Boot? - PullRequest
0 голосов
/ 06 апреля 2020

Я только начинаю поднимать Spring, исходящий из чисто Java EE фона, поэтому такие вещи, как IO C и внедрение зависимостей, для меня все равно что-то новое. Что касается документов Spring, я понимаю, что для любого класса, вызывающего экземпляры своих зависимостей, я могу выбрать автоматическое связывание этих зависимостей как форму внедрения зависимостей. И это на самом деле отличается от обычного объявления экземпляра, которое мы всегда делаем в java, как показано ниже: Animal animal1 = new Animal()

В одном из моих маленьких тестовых сервисов загрузочного проекта Spring я заметил, что в итоге я делаю оба внедрение зависимости и нормальное создание класса. Я использую репозиторий JPA для создания своего слоя репо и автоматически связываю классы репо, чтобы я мог использовать их, например.

@Autowired 
customerAccountRepo 

Все хорошо. У меня также есть DAO customerMembershipValidity, чьи атрибуты являются другими объявленными POJO и в нем есть некоторые вспомогательные функции c для установки атрибутов DAO. Однако, чтобы использовать этот DAO, я создаю несколько экземпляров DAO традиционным способом, создавая CustomerMembershipValidity customerMembershipValidity1 = new CustomerMembershipValidity() несколько раз по всему сервису, чтобы вызывать вспомогательные c вспомогательные методы, такие как customerMembershipValidity.setNewExpiry(). Я не думал, что возникнет необходимость в автоматическом подключении, так как я имею дело с DAO или POJO, а не с другим сервисом ... или я должен?

На данный момент код кажется работоспособным, когда я выполняю свой модуль тестирование, но я хотел бы знать, не повредит ли это общему долговечности и чувствительности кода, или это может привести к сбою в E2E при запуске приложения Spring Boot.

1 Ответ

0 голосов
/ 06 апреля 2020

У меня есть несколько рекомендаций:

  1. DAO должен быть одноэлементным Spring Bean-компонентом, который вы вводите в сервисный компонент (-ы), которому он нужен. Убедитесь, что в вашем DAO нет изменяемого общего состояния - только операции с базой данных.
  2. В написанных мной DAO могут использоваться функции mapper для сопоставления ResultSet с объектами / коллекциями, но я не вижу необходимости в помощниках.
  3. Spring предпочитает использовать инжектор конструктора. Вы не должны использовать setter или autowired атрибут для вставки зависимостей.
  4. Если вы используете new, это означает, что объект не находится под контролем Spring. Целесообразно вызывать new для объектов в области действия метода, но не для Spring Bean, как DAO.
  5. Модульное тестирование и производство - это две разные вещи. Я предпочитаю оставить Spring вне модульного тестирования. Я называю новым для тестов JUnit, но не производственный код. После того, как я протестировал DAO, я могу использовать макеты для сервисов, которые зависят от него.

Вы умны, чтобы взять Spring и оставить позади Java EE. Это мертвый стандарт двадцатилетнего возраста.

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