Spring从属性文件中读取@Bean类的值

时间:2017-12-10 17:08:27

标签: java spring

我正在尝试仅使用注释创建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}

知道我做错了什么?

2 个答案:

答案 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注释可以解决问题。