Есть класс - родитель Parent. И потомок от него Child.
@Named
class Child extends Parent { ... }
В родителе я хочу заинжектить ребенка (т.е. дергать методы обьекта ребенка).
Но я не могу через
@Inject
Child child
его получить т.к. на этапе инициализации родителя ребенок еще не определен.
Как мне в родительском классе получить(заинжектить) обьект ребенка?
Ну раз "на этапе инициализации родителя ребенок еще не определен", то самое простое идти с другой стороны:
@Named
class Child extends Parent {
@Inject
Parent parent;
@PostConstruct
void init(){
parent.setChild(this);
}
}
Проблема в проектировании наследования.
1) Если эти методы были в Parent, а Child их переопределял тогда нужно кастовить просто инициализацию к Parent.
2) Если вы хотите использовать методы Child, которых нету в Parent- это изначально не правильный подход к проектированию наследования, но сделать это можно с помощью:
implement SmartBeanInitializing на Parent, а после этого в методе которые переопределяются с этого интерфейса инициализировать Child. Тогда не будет NPE. @LazyInjection в Parent поля Child. Вариант с @PostConstruct не будет работать, так как на момент иньекции this будет null.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости