Я думаю, что это тривиальная проблема, но я не смог найти никаких обсуждений по этому поводу.
У меня есть DeeplyNestedObject
, чей объектный граф должен быть автоматически подключен посредством инжекции Dependency
.Внутри этого объекта граф Dependency
должен иметь одноэлементную область.
class DeeplyNestedObject {
Dependency dependency;//should be same instance as in SomeOtherObject
SomeOtherObject someOtherObject;
@Autowired
public DeeplyNestedObject(Dependency dependency,
SomeOtherObject someOtherObject){
this.dependency = dependency;
this.someOtherObject = someOtherObject;
}
}
//this is just some other class nested inside DeeplyNestedObject's object graph
class SomeOtherObject{
Dependency dependency;//should be same instance as in DeeplyNestedObject
@Autowired
public DeeplyNestedObject(Dependency dependency){
this.dependency = dependency;
}
}
Так как мне нужно только Dependency
для автоматической передачи SomeOtherObject и, таким образом, DeeplyNestedObject , эта конфигурация компонентадолжно быть достаточно:
@Bean
Dependency dependency(){
return new Dependency();
}
У меня есть три требования, хотя
-
DeeplyNestedObject
должен быть прототипирован, поэтому я хочу каждый раз новый экземпляр этого графа объектаЯ автоматически подключаю его где-нибудь
- A
Dependency
следует рассматривать как одиночный в пределах этого графа объекта, - Каждый DeeplyNestedObject должен иметьего собственный экземпляр Зависимость
Я не могу решить следующую проблему:
- Если я прицела Зависимость в качестве прототипаЯ всегда получу новый экземпляр Dependency , нарушающий ограничение 2 (
Dependency
in DeeplyNestedObject и SomeOtherObject будет другим) - ЕслиЯ рассматриваю Dependency как Singleton, тогда я нарушуограничение 3 (каждый
DeeplyNestedObject
и его графы объектов будут иметь один и тот же Dependency
объект)
В основном то, что мне кажется мне нужно, это ввести еще один контейнер IoCдля DeeplyNestedObject , в который я могу ввести Dependency и затем предоставить его в виде синглтона для графика DeeplyNestedObject
.Тем не менее, я не видел никакого решения, как это до сих пор.