首页 > 解决方案 > 如何使用 spring boot 1.5.x 访问 BeanFactoryPostProcessor 中的属性

问题描述

我正在尝试使用 spring boot 1.5.x 从 BeanFactoryPostProcessor 中的 application.yml 获取属性:

应用程序.yml:

prong: 
  nfcloan:
    jackson:
      json-sub-types-package:
      - com.shuweicloud.starter.acc.dto.request
@ConfigurationProperties(prefix = "prong.nfcloan.jackson")
public class JacksonProperties {

    private List<String> jsonSubTypesPackage;

    public List<String> getJsonSubTypesPackage() {
        return jsonSubTypesPackage;
    }

    public void setJsonSubTypesPackage(List<String> jsonSubTypesPackage) {
        this.jsonSubTypesPackage = jsonSubTypesPackage;
    }

}
@Component
public class AccBeanFactoryPostProcessor implements BeanFactoryPostProcessor{

    @Autowired
    private JacksonProperties jacksonProperties;

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        List<String> packages = jacksonProperties.getJsonSubTypesPackage();
        // do something
    }

}

主要类:

@SpringBootApplication
@EnableConfigurationProperties({JacksonProperties.class})
public class AccountingApplication {

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

}

packages变量为空。如何解决?

标签: spring-boot

解决方案


我找到了一个解决方案:

@Component
public class AccBeanFactoryPostProcessor implements BeanFactoryPostProcessor, EnvironmentAware {

    private Environment environment;

    @Override
    public void setEnvironment(Environment environment) {
        this.environment = environment;
    }

    @SuppressWarnings("unchecked")
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        List<String> packages = environment.getProperty("prong.nfcloan.jackson.json-sub-types-package", List.class);
        // do something
    }
}

推荐阅读