Acesse o componente injectée da fábrica de feijão

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 DefaultListableBeanFactoryque é 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);
  }

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=171661&siteId=1
Recomendado
Clasificación