Когда DI не подходит для использования - PullRequest
0 голосов
/ 03 апреля 2019

Я читаю блог о DI, и есть некоторые предложения, которые я не понимаю.

Что означает, что DI является одноэлементным объектом во время выполнения, и только те объекты в диапазоне сканирования пружины (с @Component) могут использовать DI по аннотации (@Autowired), в то время как другие создаются новым нельзя использовать DI по аннотации?

не может использовать DI, потому что Отец может быть создан новым.

   public class Father{
        private SonRepository sonRepo;
        private Son getSon(){return sonRepo.getByFatherId(this.id);}
        public Father(SonRepository sonRepo){this.sonRepo = sonRepo;}
   }

может использовать DI, потому что FatherFactory - одноэлементный объект, сгенерированный системой.

 @Component
 public class FatherFactory{
    private SonRepository sonRepo;
    @Autowired
    public FatherFactory(SonRepository sonRepo){}
    public Father createFather(){
    return new Father(sonRepo);
 }

1 Ответ

2 голосов
/ 03 апреля 2019

Это означает:

  • Spring отвечает за управление областью объектов.Вам не нужен шаблон как финальные классы со статическими методами getInstance.(О том, как синглтоны работают в Spring , см. Этот вопрос .)

  • Spring может автоматически связывать вещи в компоненты, только если эти компоненты находятся где-то, что было сказано посмотретьСканирование компонентов - это то, как Spring ищет компоненты, необходимые для подключения.Вы даете стартовой точке пружину, указывая, с каких имен пакетов нужно начинать поиск.Если компонент не находится в одном из этих каталогов, Spring не сможет им управлять.

...