Доступ к компоненту инжекта с фабрики бобов - PullRequest
0 голосов
/ 27 декабря 2018

Предположим, у нас есть bean-объект с прототипом.

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

Мы вводим этот бин в класс 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 для параметров фабричного метода, предоставляя информацию о точке внедрения?

1 Ответ

0 голосов
/ 27 декабря 2018

Да.Вы можете добавить DefaultListableBeanFactory, который является контейнером пружинных бобов, содержащим всю информацию о бобах, в параметры метода фабрики бобов:

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