Spring MVC, как мои бобы автоматически подключаются в контроллере? - PullRequest
0 голосов
/ 17 сентября 2018

Я новичок в весне и весне.Я настроил источник данных и MVC, следуя видео-учебник.Я добавил файл контекста offers-servlet.xml в WEB-INF, где я сканирую свой пакет controllers, где находится мой controller.java.я создал другой контекст service-context.xml, где я сканирую компоненты service.java классы.Я создаю экземпляр service.java в моем controller.java с помощью setService метода, который я аннотировал @Autowired.И я сомневаюсь, что service.java автоматически подключается в моем controller.java, где каждый из них находится в разных пакетах и ​​разных файлах context.xml с разными компонентами scan.

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

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

Как понимать Spring @ ComponentScan

0 голосов
/ 18 сентября 2018

Когда вы упомянули пакеты для сканирования компонентов, он указывает Spring-контейнер для поиска аннотированных классов в упомянутом пакете, а затем bean-объектов (объектов классов, которые будут иметь @Component или связанные аннотации, такие как @Service, @Controller, @Repository) будет управляться (весь жизненный цикл от создания до уничтожения) весной.Таким образом, в вашем приложении всякий раз, когда вам понадобится один такой компонент, а не его создание, он будет предоставлен контейнером.С другой стороны, если вы не указали 'component-scan', вам придется идентифицировать ваши классы (используя xml или javaConfig), бобами которых вы хотите управлять Spring-container.Теперь эта часть определяла, какие bean-компоненты будут управляться Spring-контейнером.

Далее следует подключение этих bean-компонентов там, где это необходимо.Для этого вы упомянули @Autowired в методе установки.Когда Spring-container встречает эту аннотацию, он будет искать этот bean-компонент (служебный компонент в вашем случае) в контейнере.Поскольку этот bean-компонент управляется контейнером (из предыдущего шага) и доступен при необходимости (в вашем случае в классе контроллера), контейнер предоставит (auto-wire) сервисный bean-компонент в метод setter.

0 голосов
/ 17 сентября 2018

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

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

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