你好!
По сути, они предназначены для того же действия, которое получает боб из контейнера для пружин (то есть ApplicationContext
).Вы можете думать, что @Autowired
фактически сделает работу, проделанную ApplictionContext.getBean()
за сценой.
Различия в том, что при использовании ApplictionContext.getBean()
разработчики сами отвечают за весь процесс. Они должны убедиться, что получают правильные бины, вручную вызывая getBean()
с правильными параметрами.Но при использовании @Autowired
разработчику не нужно делать этот процесс вручную.Вместо этого им просто нужно объявить, какие бины они хотят, и Spring получит эти бины для них.Так что это как-то в духе Inversion Of Control (IOC), поскольку ответственность за управление вышеупомянутыми задачами переворачивается и переносится с разработчиков на фреймворк.
В качестве передового опыта мы всегда должны использовать @Autowired
первый.Мало того, что это более удобно, менее подвержено ошибкам, но и наши доменные коды не будут зависеть от класса среды Spring (т.е. ApplictionContext
), что делает наши коды более чистыми.
Если вы столкнулись с ситуацией, когда @Autowired
не может удовлетворить ваши требования, поскольку вам нужно максимально гибко получить бин, проверьте, может ли ApplictionContext
помочь вам в то время.