我正在尝试仅使用注释创建Spring bean。我无法从属性文件中加载@Bean类的值。
这是我的代码:
这是我的主要课程
public class AnnotationDI {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(ConfigurationProvider.class);
ApplicationProperties properties = (ApplicationProperties)context.getBean(ApplicationProperties.class);
System.out.println(properties);
}}
配置类
@Configuration
public class ConfigurationProvider {
private ApplicationProperties m_applicationProperties;
@Bean
public ApplicationProperties getApplicationProperties() {
return new ApplicationProperties();
}
}
Bean类
@PropertySource(value = { "classpath:application.properties" })
public class ApplicationProperties {
@Value("${longThreadCount}")
private String m_longProcessThread;
@Value("${routeTimeout}")
private String m_routeTimeout;
@Value("${updateDirectoryPath}")
private String m_updateDirectoryPath;
public String getLongProcessThread() {
return m_longProcessThread;
}
@Override
public String toString() {
return "ApplicationProperties [m_longProcessThread=" +m_longProcessThread"]";
}
}
当我运行这个程序时,我得到以下输出
m_longProcessThread = $ {longThreadCount}
知道我做错了什么?
答案 0 :(得分:2)
为了能够解决占位符@Value
,您需要注册PropertySourcesPlaceholderConfigurer
。由于这是BeanFactoryPostProcessor
,因此需要将其注册为static
bean,以便在此过程的早期检测到它。
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
答案 1 :(得分:1)
@PropertySource
注释必须与@Configuration
注释一起使用,如此,
@Configuration
@PropertySource(value = { "classpath:application.properties" })
public class ApplicationProperties {
...
}
在这种情况下,添加@Configuration
注释可以解决问题。