Получение классов бобов до / во время фазы создания - PullRequest
1 голос
/ 28 мая 2019

В приложении Spring можно получить все (?) Bean с applicationContext.getBeansOfType(Object.class).Это, конечно, возможно только после того, как все Бины были созданы.

Итак, если я вызываю этот метод в конструкторе Бина, я должен быть счастливчиком, чтобы быть последним Бином, который был создан, чтобыиметь доступ ко всем из них.

Насколько я понимаю, жизненный цикл Spring Beans, есть фаза, в которой создаются BeanDefinitions, до инициализации Beans.

  • Как можно получить все созданные BeanDefinitions в конструкторе Бина?
  • Могу ли я также получить типы (как Class) этих BeanDefinitions?Тип BeanDefinition , по-видимому, предоставляет только "текущее имя класса bean-компонента для этого определения bean-компонента" .

Или это единственный способ получить эти типы послевсе бобы были построены (например, @PostConstruct)?

Ответы [ 2 ]

1 голос
/ 28 мая 2019

Может быть, этот код может помочь

    for (String name : applicationContext.getBeanFactory().getBeanDefinitionNames()) {
        BeanDefinition beanDefinition = applicationContext.getBeanFactory().getBeanDefinition(name);
        String className = beanDefinition.getBeanClassName();
        Class<?> clazz = Class.forName(className);
    }

Цикл получает все BeanDefinition с, а затем вы загружаете класс для каждого и делаете то, что хотите?

Кстати, это может быть не очень хороший способ использования Spring, но он будет работать.

1 голос
/ 28 мая 2019

Вы можете создать последний bean-компонент, поместив его, например, в класс @Configuration с минимальным порядком инициализации, чтобы он был последним с @Order(Ordered.LOWEST_PRECEDENCE), то есть:

@Configuration
@Order(Ordered.LOWEST_PRECEDENCE)
public class Last {

    @Autowired
    ApplicationContext applicationContext;

    @Bean
    public String lastBean() {

        applicationContext.getBeanDefinitionNames();    //retrive all created BeanDefinitions in the constructor of a Bean

        applicationContext.getBeansOfType(Object.class); //retrive the types (as Class) 

        return "lastBean";
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...