1 Вопрос: Как использовать @Autowired в подклассе для поля, определенного в базовом классе?

вопрос создан в Thu, May 2, 2019 12:00 AM

Можно ли автоматически связать экземпляр в подклассе для поля, которое определено в базовом классе?

Итак, Интерфейс:

public interface Xyz { ...}

Абстрактный базовый класс:

public abstract class Abc {
    Xyz xyz;
}

Подкласс (ы) класса absctract, где я хочу автоматически связать конкретную реализацию интерфейса:

public class Def extend Abc {
    @Autowired
    // Here I want to autowire a concrete implementation of Xyz, maybe called XyzImpl. Can I do this maybe in a constructor or ...?
}

public class Ghi extend Abc {
    @Autowired
    // Here I want to autowire a concrete implementation of Xyz, maybe called XyzImpl. Can I do this maybe in a constructor or ...?
}

public class Jkl extend Abc {
    @Autowired
    // Here I want to autowire a concrete implementation of Xyz, maybe called XyzImpl. Can I do this maybe in a constructor or ...?
}
    
0
  1. Вы пытались увидеть результат?
    2019-05-02 15: 41: 55Z
  2. У вас есть только один компонент, реализующий Xyz, или он неоднозначен? Вы можете прикрепить @Autowired к экземпляру xyz в Abc в противном случае, и все будет хорошо. Я делаю это все время. (В качестве альтернативы вы можете сделать инъекцию в конструктор.)
    2019-05-02 16: 02: 07Z
  3. Нет, у меня есть неоднозначные классы, реализующие интерфейс.
    2019-05-02 21: 42: 36Z
  4. Как вы ожидаете, что он узнает, какой Xyz будет вводить?
    2019-05-03 16: 05: 33Z
1 ответ                              1                         

Попробуйте это:

  1. В классе Abc внесите это изменение private final Xyz xyz;
  2. В классе Abc добавьте конструктор, который принимает параметр Xyz; установите поле xyz в этом конструкторе.
  3. в классе Def добавьте конструктор, который принимает параметр Xyz и который вызывает super(xyz).
  4. Autowire параметр xyz в конструкторе Def.
1
2019-05-02 15: 57: 40Z
источник размещен Вот