基于Spring Java的静态方法配置
谁能建议我们为什么需要使用 方法声明PropertySourcesPlaceholderConfigurer bean
?我只是发现,如果我在下面使用非静态方法,则url将被设置为null值,而不是从属性文件中获取-
@Value("${spring.datasource.url}")private String url;
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfig(String profile) {
String propertyFileName = "application_"+profile+".properties";
System.out.println(propertyFileName);
PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
configurer.setLocation(new ClassPathResource(propertyFileName));
return configurer;
}
@Bean
@Profile("local")
public static String localProfile(){
return "local";
}
@Bean
@Profile("prod")
public static String prodProfile(){
return "prod";
}
回答:
PropertySourcesPlaceholderConfigurer
对象负责@Value
根据当前的Spring
Environment及其PropertySources集解析注释。PropertySourcesPlaceholderConfigurer
类工具BeanFactoryPostProcessor
。在容器生命周期中,BeanFactoryPostProcessor
必须早于@Configuration
-annotated类的对象实例化对象。
如果@Configuration
具有实例化方法的-
annotated类返回一个PropertySourcesPlaceholderConfigurer
对象,则容器无法实例化该PropertySourcesPlaceholderConfigurer
对象,而无需实例化@Configuration
-annotated类对象本身。在这种情况下,@Value
由于-
annotated类PropertySourcesPlaceholderConfigurer
的对象实例化时该对象不存在,因此无法解决@Configuration
。因此,@Value
-annotated字段采用默认值,即null
。
有关更多信息,请参见@Bean
javadoc的“ Bootstrapping”部分。
以上是 基于Spring Java的静态方法配置 的全部内容, 来源链接: utcz.com/qa/406076.html