2016-02-25 1 views
0

Если у меня есть класс, который использует весенний боб, (будет подключен через @Autowired). Я заметил, что не только класс, который будет введен, нужен @Component, но также и класс, который он использует (вводят). Почему так? Не следует ли вводить весну там, где @Autowired? Без использования @Component для класса форсунок?Весна @ Автоматическое обнаружение

+1

Весна будет только вводить зависимости в другие управляемые фасолью весны. Один из способов сделать бобы, управляемые Spring, - добавить '@ Component'. Весна не волшебным образом расшифровывает экземпляры в любой класс, который он не знает. Кроме того, даже если у вас есть '@ Component' и' 'new MyObject()' spring не будет вводить зависимости, потому что это не зависимая от пружины зависимость. –

ответ

2

Spring обрабатывает и управляет только теми классами, которые помечены одним из стереотипных аннотаций @Component, @Controller, @Repository, @Service.

Он не сканирует все ваши классы (что сделало бы запуск очень медленным).

Если класс не управляется Spring, он не обрабатывает аннотацию внутри этого конкретного класса.

0

В Spring, один работает с beans. A bean - объект java, которым управляет spring context. При столкновении с bean, содержащим @Inject, Spring будет располагать свой context для bean типа переменной, подлежащей впрыску. Если такой bean не определен, Spring не будет ничего вводить. Кроме того, если класс с @Inject не имеет bean, то Spring не узнает об этом и, следовательно, не может ничего вводить в него.

Чтобы получить Spring для создания bean класса, доступно несколько методов. Через аннотации класс должен быть аннотирован @Component или более специализированными аннотациями @Service, @Repository и @Controller. Только тогда будет Spring создать bean для класса, который может быть @Inject ed в других beans.