Spring boot 如何使用spring boot 1.5.x访问BeanFactoryPostProcessor中的属性
我正在尝试使用spring boot 1.5.x从BeanFactoryPostProcessor中的application.yml获取属性: application.yml: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
插脚:
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。