весной, чем отличается использование ApplicationContex.getBean () и @Autowired?Как я могу решить, какой выбрать? - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь научиться весне, читая broadLeaf.

Почему некоторые broadLeaf используют ApplictionContext.getBean () вместо аннотации @Autowired?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

你好!

По сути, они предназначены для того же действия, которое получает боб из контейнера для пружин (то есть ApplicationContext).Вы можете думать, что @Autowired фактически сделает работу, проделанную ApplictionContext.getBean() за сценой.

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

В качестве передового опыта мы всегда должны использовать @Autowiredпервый.Мало того, что это более удобно, менее подвержено ошибкам, но и наши доменные коды не будут зависеть от класса среды Spring (т.е. ApplictionContext), что делает наши коды более чистыми.

Если вы столкнулись с ситуацией, когда @Autowired не может удовлетворить ваши требования, поскольку вам нужно максимально гибко получить бин, проверьте, может ли ApplictionContext помочь вам в то время.

0 голосов
/ 01 февраля 2019

Пример

@Service
public class Car {
  @Autowired
  public Person driver;
}

@ Autowired соблюдается при подключении Bean Car.Поле заполняется сразу после создания экземпляра конструктором по умолчанию (new Car()) через Spring.

ApplictionContext.getBean()

То же самое, но: вы должны вызывать его по собственному коду.

@Autowired совпадает с @Inject.Разница не в функциональности, а в дизайне.Spring использует внедрение контекста и зависимости (CDI) @Inject как часть принципа инверсии управления (IoC) и должно быть предпочтительным.Вот почему

...