Spring Java 基于静态方法的配置
Spring Java based configuration with static method
任何人都可以告诉我们为什么我们需要使用 static 方法声明 PropertySourcesPlaceholderConfigurer bean 吗?我刚刚发现,如果我在下面使用非静态,那么 url 将被设置为空值,而不是从 属性 文件中获取 -
@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
对象负责针对当前 Spring 环境及其 PropertySources 集解析 @Value
注释。 PropertySourcesPlaceholderConfigurer
class 实施 BeanFactoryPostProcessor
。在容器生命周期中,BeanFactoryPostProcessor
对象必须比 @Configuration
-注解的 class 对象更早实例化。
如果您使用返回 PropertySourcesPlaceholderConfigurer
对象的实例方法对 @Configuration
注释 class,则容器无法在不实例化 [=] 的情况下实例化 PropertySourcesPlaceholderConfigurer
对象15=]-注释 class 对象本身。在这种情况下,无法解析 @Value
,因为 PropertySourcesPlaceholderConfigurer
对象在 @Configuration
注释的 class 对象实例化时不存在。因此,@Value
-注释字段采用默认值,即 null
。
有关详细信息,请参阅 @Bean
javadoc 的 "Bootstrapping" 部分。
任何人都可以告诉我们为什么我们需要使用 static 方法声明 PropertySourcesPlaceholderConfigurer bean 吗?我刚刚发现,如果我在下面使用非静态,那么 url 将被设置为空值,而不是从 属性 文件中获取 -
@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
对象负责针对当前 Spring 环境及其 PropertySources 集解析 @Value
注释。 PropertySourcesPlaceholderConfigurer
class 实施 BeanFactoryPostProcessor
。在容器生命周期中,BeanFactoryPostProcessor
对象必须比 @Configuration
-注解的 class 对象更早实例化。
如果您使用返回 PropertySourcesPlaceholderConfigurer
对象的实例方法对 @Configuration
注释 class,则容器无法在不实例化 [=] 的情况下实例化 PropertySourcesPlaceholderConfigurer
对象15=]-注释 class 对象本身。在这种情况下,无法解析 @Value
,因为 PropertySourcesPlaceholderConfigurer
对象在 @Configuration
注释的 class 对象实例化时不存在。因此,@Value
-注释字段采用默认值,即 null
。
有关详细信息,请参阅 @Bean
javadoc 的 "Bootstrapping" 部分。