首页 > 解决方案 > 在 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);
    }

}

标签: springspring-boot

解决方案


推荐阅读