Если у меня есть класс, который использует весенний боб, (будет подключен через @Autowired
). Я заметил, что не только класс, который будет введен, нужен @Component
, но также и класс, который он использует (вводят). Почему так? Не следует ли вводить весну там, где @Autowired
? Без использования @Component
для класса форсунок?Весна @ Автоматическое обнаружение
ответ
Spring обрабатывает и управляет только теми классами, которые помечены одним из стереотипных аннотаций @Component
, @Controller
, @Repository
, @Service
.
Он не сканирует все ваши классы (что сделало бы запуск очень медленным).
Если класс не управляется Spring, он не обрабатывает аннотацию внутри этого конкретного класса.
В 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
.
Весна будет только вводить зависимости в другие управляемые фасолью весны. Один из способов сделать бобы, управляемые Spring, - добавить '@ Component'. Весна не волшебным образом расшифровывает экземпляры в любой класс, который он не знает. Кроме того, даже если у вас есть '@ Component' и' 'new MyObject()' spring не будет вводить зависимости, потому что это не зависимая от пружины зависимость. –