Загрузить класс конфигурации перед BeanDefinitionRegistryPostProcessor - PullRequest
0 голосов
/ 14 апреля 2020

Конфигурация B ниже использует BeanDefinitionRegistryPostProcessor для динамической регистрации некоторых пружинных бинов. Однако мне нужно получить доступ к классу конфигурации A, который автоматически подключен внутри B. A всегда заканчивается значением Null, что связано с тем, что для BeanDefinitionRegistryPostProcessor - «Все обычные определения bean-компонентов были загружены, но экземпляры bean-компонентов еще не были созданы»

Могу ли я в любом случае принудительно загрузить загрузку конфигурации, чтобы экземпляр A был задан перед классом конфигурации B, чтобы applicationProperties не всегда был нулевым?

A

@ConfigurationProperties(prefix = "ie.test.appname.applications")
@Configuration
@EnableAutoConfiguration
@EnableConfigurationProperties
@RefreshScope
@Data
public class ApplicationProperties {

    private List<Application> applications = new ArrayList<>();

}

B

      @Configuration
        @Import({ ApplicationProperties.class})
        @Log4j
        public class ConfigurationManager {

            @Autowired
            private ApplicationProperties applicationProperties;

@Bean
    public BeanDefinitionRegistryPostProcessor beanPostProcessor(final ConfigurableEnvironment environment) {
        return new BeanDefinitionRegistryPostProcessor() {
            public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0) throws BeansException {
            }

            public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanRegistry) throws BeansException {
                doSomething();
            }
        };
    }


        private void doSomething() {
        List<Application> storeNamesList = applicationProperties.getApplications(); // null pointer
           }

Основной с компонентным сканированием

@SpringBootApplication
@EnableAspectJAutoProxy
@EnableScheduling
@EnableAsync
@ComponentScan("ie.test.appname")
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication .class, args);
    }

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