配置B使用BeanDefinitionRegistryPostProcessor动态注册一些Spring bean。但是,我需要访问在B内部自动装配的配置类A。由于BeanDefinitionRegistryPostProcessor的事实,A总是以Null结尾-“将加载所有常规bean定义,但尚未实例化任何bean”。>
无论如何,我是否可以强制配置加载,以便在Configuration类B之前实例化A,以便ApplicationsProperties并不总是为空?
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);
}
}