2016-02-02 4 views
7

Я сейчас в процессе добавления Spring и Hibernate в существующее приложение, но после прочтения большого количества учебников есть еще пара (также много чего), которые кажутся странными мне или мне что-то не хватает ...Spring - Tutorials vs Real Life

Все обучающие материалы, которые я нашел, являются прямолинейными (как и большинство учебников), как видно на Пример A, один контроллер для обработки запросов (JSP или WS) и autwire класс менеджера для взаимодействия с БД.

В моем случае это не применяется, так как приложение имеет класс для обработки запросов, а затем создает экземпляр класса обработчика, который, в свою очередь, создает новый класс для обработки чего-то другого, который создает новый класс для обработки (....) *, а затем обрабатывает соединение с базой данных, как показано на . Пример B.

Spring diagram - Tutorial vs Real life

Мой вопрос, как я могу сделать мой бизнес-логики класса п«Springable», то есть возможность сделать менеджера баз данных autowired внутри него?

Из всех примеров, которые я видел, я пришел с этими альтернативами:

  1. Создание autowire для ALL в DBManager внутри контроллера, а затем IoC всем бизнес Классы, пока не достигнет класса Business Logic n. Это будет соответствовать стандартам пружине, но означало бы большинство рефакторинга кода
  2. Transform ВСЕ классов бизнес-логики в фасолью
  3. Добавить SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext (это); к классу бизнес-логики п и использовать @Autowire для доступа к DBManager

Могу ли я что-то отсутствует или есть другая альтернатива?

+1

На мой взгляд, лучший (или правый) подход был бы альтернативой. 2. Преобразование всех бизнес-логик и классов доступа к данным в весенние бобы ('@ Service' и' Repository') и вместо создания экземпляров в код, настроить весну, чтобы вставлять эти компоненты, где это необходимо. Возможно, вы захотите использовать тег 'component-scan', а не подробный XML, чтобы понять, как использовать эти компоненты и управлять ими. –

ответ

1

Это только мое мнение, но вам может быть интересно.

Основная философия Весны: факт создания и конфигурации объектов, участвующих в контейнере, но не в бизнес-объектах, известен как IoC или Injection Dependency. На основе конфигурации контейнер создает и связывает (вставляет) объекты друг с другом. Это позволяет удалить код бизнес-классов, связанных с созданием и конфигурацией (этот код может быть довольно сложным). Таким образом, ваши классы станут проще и чище, и могут сосредоточиться на бизнес-логике и ничем другом.

Я считаю, что бизнес-объекты не должны создавать друг друга. Пусть весна это сделает. Он делает это отлично.

Просто пометьте бизнес-логики классов, в зависимости от его роли, с одним из стереотипа: @Component, @Service, @Controller (смысл стереотипов вы можете найти here), и ввести его с @Autowired. И если вам нужен менеджер баз данных в этих классах, введите его так же.

Итак, мой выбор соответствует точке номер два: «2. Transform все классы бизнес-логики в бобах ...»