Spring boot 如何使用spring boot 1.5.x访问BeanFactoryPostProcessor中的属性

Spring boot 如何使用spring boot 1.5.x访问BeanFactoryPostProcessor中的属性,spring-boot,Spring Boot,我正在尝试使用spring boot 1.5.x从BeanFactoryPostProcessor中的application.yml获取属性: application.yml: 插脚: nfcloan: 杰克逊: json子类型包: -com.shuweicloud.starter.acc.dto.request @ConfigurationProperties(prefix=“prong.nfcloan.jackson”) 公共类JacksonProperties{ 私有列表jsonSubT

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

application.yml:

插脚:
nfcloan:
杰克逊:
json子类型包:
-com.shuweicloud.starter.acc.dto.request
@ConfigurationProperties(prefix=“prong.nfcloan.jackson”)
公共类JacksonProperties{
私有列表jsonSubTypesPackage;
公共列表getJsonSubTypesPackage(){
返回jsonSubTypesPackage;
}
公共无效集合jsonSubTypesPackage(列表jsonSubTypesPackage){
this.jsonSubTypesPackage=jsonSubTypesPackage;
}
}
@组件
公共类AccBeanFactoryPostProcessor实现BeanFactoryPostProcessor{
@自动连线
私人杰克森地产杰克森地产;
@凌驾
public void后处理beanFactory(ConfigurableListableBeanFactory beanFactory)引发BeanException{
List packages=jacksonProperties.getJsonSubTypesPackage();
//做点什么
}
}
主要类别:

@springboot应用程序
@EnableConfigurationProperties({JacksonProperties.class})
公共类会计应用程序{
公共静态void main(字符串[]args){
run(AccountingApplication.class,args);
}
}
但是
packages
变量为空。如何解决它?

我找到了一个解决方案:

@组件
公共类AccBeanFactoryPostProcessor实现了BeanFactoryPostProcessor,环境感知{
私人环境;
@凌驾
公共环境(环境){
这个。环境=环境;
}
@抑制警告(“未选中”)
@凌驾
public void后处理beanFactory(ConfigurableListableBeanFactory beanFactory)引发BeanException{
List packages=environment.getProperty(“prong.nfcloan.jackson.json子类型包”,List.class);
//做点什么
}
}
我找到了一个解决方案:

@组件
公共类AccBeanFactoryPostProcessor实现了BeanFactoryPostProcessor,环境感知{
私人环境;
@凌驾
公共环境(环境){
这个。环境=环境;
}
@抑制警告(“未选中”)
@凌驾
public void后处理beanFactory(ConfigurableListableBeanFactory beanFactory)引发BeanException{
List packages=environment.getProperty(“prong.nfcloan.jackson.json子类型包”,List.class);
//做点什么
}
}

Spring boot内部使用绑定器API将解析的属性“映射”到
@configurationproperties
bean中

实际上,在创建BeanFactoryPostProcessor之后的spring引导启动过程中会发生这种情况

现在你的解决方案显然会起作用,因为你有点“绕过”这个决议

但是,如果您仍希望将配置作为
JacksonProperties
的实例(如果您有许多属性需要解决,或者通常更喜欢以更具弹性的方式进行更多工作,则可能与此相关),您可以使用此绑定器API:

   // inside the "postProcessBeanFactory" method, using the injected environment
   BindResult<ExampleProperties> bindResult = Binder.get(environment)
                    .bind("prong.nfcloan.jackson", JacksonProperties.class);
   JacksonProperties properties = bindResult.get();
//在“postProcessBeanFactory”方法中,使用注入的环境
BindResult BindResult=Binder.get(环境)
.bind(“prong.nfcloan.jackson”,JacksonProperties.class);
JacksonProperties=bindResult.get();

Spring boot内部使用绑定器API将解析的属性“映射”到
@configurationproperties
bean中

实际上,在创建BeanFactoryPostProcessor之后的spring引导启动过程中会发生这种情况

现在你的解决方案显然会起作用,因为你有点“绕过”这个决议

但是,如果您仍希望将配置作为
JacksonProperties
的实例(如果您有许多属性需要解决,或者通常更喜欢以更具弹性的方式进行更多工作,则可能与此相关),您可以使用此绑定器API:

   // inside the "postProcessBeanFactory" method, using the injected environment
   BindResult<ExampleProperties> bindResult = Binder.get(environment)
                    .bind("prong.nfcloan.jackson", JacksonProperties.class);
   JacksonProperties properties = bindResult.get();
//在“postProcessBeanFactory”方法中,使用注入的环境
BindResult BindResult=Binder.get(环境)
.bind(“prong.nfcloan.jackson”,JacksonProperties.class);
JacksonProperties=bindResult.get();

我试过了,但没用。你不能。由于
BeanFactoryPostProcessor
实例是在过程的早期创建的。我尝试过,但没有成功。您不能。由于
BeanFactoryPostProcessor
实例是在过程的早期创建的。谢谢,但是我使用的是SpringBoot 1.5.x,我在SpringBoot 1.5.x.Thank中找不到
Binder
API,但是我在SpringBoot 1.5.x中找不到
Binder
API。