从bean工厂访问注入者组件

时间:2018-12-27 11:10:27

标签: java spring dependency-injection javabeans

假设我们有一个原型范围的bean。

public class FooConfiguration {
  @Bean
  @Scope("prototype")
  public Foo foo(@Autowired Bar bar) {
    return new Foo(bar);
  }
}

我们正在将该bean注入类TheDependent

@Component
public class TheDependent {
  @Autowired
  private Foo foo;
}

但是还有另一个。

@Component
public class AnotherOne {
  @Autowired
  private Foo foo;
}

在每个@Autowired中,将创建一个新的Foo实例,因为它用@Scope("prototype")进行了注释。

我想从工厂方法FooConfiguration#foo(Bar)中访问“依赖”类。可能吗? Spring可以向我注入某种 context 对象到factory方法的参数中,以提供有关注入点的信息吗?

1 个答案:

答案 0 :(得分:2)

是的。您可以将DefaultListableBeanFactory注入到bean工厂方法的参数中,该容器是包含所有bean信息的spring bean容器:

  @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);
  }