Cttt:
Suponha que temos um bean com escopo de protótipo.
public class FooConfiguration {
@Bean
@Scope("prototype")
public Foo foo(@Autowired Bar bar) {
return new Foo(bar);
}
}
Estamos injetando este feijão a uma classe, TheDependent
.
@Component
public class TheDependent {
@Autowired
private Foo foo;
}
Mas há também um outro.
@Component
public class AnotherOne {
@Autowired
private Foo foo;
}
Em cada um @Autowired
, uma nova instância Foo
é criada porque está anotado com @Scope("prototype")
.
Gostaria de acessar a classe 'dependente' do método de fábrica, FooConfiguration#foo(Bar)
. É possível? Can Primavera injetar me algum tipo de contexto objeto para os parâmetros do método de fábrica, fornecendo informações sobre o ponto de injeção?
Ken Chan
Sim. Você pode injetar DefaultListableBeanFactory
que é o contêiner primavera feijão contendo todas as informações de feijão para os parâmetros do método de fábrica de feijão:
@Bean
@Scope("prototype")
public Foo foo(@Autowired Bar bar , DefaultListableBeanFactory beanFactory) {
//Get all the name of the dependent bean of this bean
for(String dependentBean : beanFactory.getDependentBeans("foo")){
//Get the class of each dependent bean
beanFactory.getType(dependentBean);
}
return new Foo(bar);
}