Inject обьекта потомка

246
24 января 2018, 15:19

Есть класс - родитель Parent. И потомок от него Child.

@Named
class Child extends Parent { ... }

В родителе я хочу заинжектить ребенка (т.е. дергать методы обьекта ребенка).

Но я не могу через

@Inject
Child child

его получить т.к. на этапе инициализации родителя ребенок еще не определен.

Как мне в родительском классе получить(заинжектить) обьект ребенка?

Answer 1

Ну раз "на этапе инициализации родителя ребенок еще не определен", то самое простое идти с другой стороны:

@Named
class Child extends Parent { 
    @Inject
    Parent parent;
    @PostConstruct
    void init(){
        parent.setChild(this);
    }
}
Answer 2

Проблема в проектировании наследования.

1) Если эти методы были в Parent, а Child их переопределял тогда нужно кастовить просто инициализацию к Parent.

2) Если вы хотите использовать методы Child, которых нету в Parent- это изначально не правильный подход к проектированию наследования, но сделать это можно с помощью:

  • implement SmartBeanInitializing на Parent, а после этого в методе которые переопределяются с этого интерфейса инициализировать Child. Тогда не будет NPE.
  • @LazyInjection в Parent поля Child.

Вариант с @PostConstruct не будет работать, так как на момент иньекции this будет null.

READ ALSO
Какая временная зона используется в Oracle типе Date

Какая временная зона используется в Oracle типе Date

Имеется в базе (Oracle 12C) таблица с полем типа Date, таблица старая и в этом поле хранится не только дата но и времяКак узнать, какое значение хранится...

193
Кодировка, Java, NetBeans

Кодировка, Java, NetBeans

Учусь ява для вебНаписал сокет для общения с клиентом все работает но с проблемой такой что при запуске программы прямо в ide то работает отлично...

142
Ошибка при попытке приведения типа

Ошибка при попытке приведения типа

Здравствуйте, подскажите пожалуйстаПри передаче в данный код значений определенного типа int, long и т

163
Причина возниконовения Runtime Error?

Причина возниконовения Runtime Error?

Доброго времени сутокНеобходимо решить задачку на одном ресурсе

198