spring - 在 BeanDefinitionRegistryPostProcessor 之前加载配置类
问题描述
下面的配置 B 是使用 BeanDefinitionRegistryPostProcessor 来动态注册一些 spring bean。但是我需要访问在 B 中自动装配的配置类 A。A 总是最终为 Null,这是由于 BeanDefinitionRegistryPostProcessor 的事实 - “所有常规 bean 定义都将被加载,但还没有实例化 bean”
无论如何我可以强制加载配置,以便在配置类 B 之前实例化 A,从而使 applicationsProperties 不总是为空?
一个
@ConfigurationProperties(prefix = "ie.test.appname.applications")
@Configuration
@EnableAutoConfiguration
@EnableConfigurationProperties
@RefreshScope
@Data
public class ApplicationProperties {
private List<Application> applications = new ArrayList<>();
}
乙
@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);
}
}
解决方案
推荐阅读
- angular - Angular 7 & Angular Material - 验证器未显示 MinLength 错误
- python - Pyftdi - ValueError:没有可用的后端。是否有任何解决此错误的故障排除有关 Windows 10 的问题?
- loops - Ansible - 组合两个以上列表时,loop + zip 的正确语法是什么?
- php - 如何为 PHP 7.2 修复此正则表达式以避免 PREG_JIT_STACKLIMIT_ERROR?
- netsuite - 可以上传到记录的客户端脚本的数量是否有限制?
- node.js - 用于测试的 Transpile Node 脚本
- javascript - 检测函数启动的所有异步工作何时完成
- json - 在 Json 响应中访问 _embedded
- python - 无法从 numpy 数组创建熊猫数据框
- javascript - 无法合并链表?