Конфигурация 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);
}
}