Spring不加载属性

时间:2017-10-04 10:04:30

标签: spring maven intellij-idea properties

目前我正在学习使用Spring,而我已经在添加一些属性方面失败了。

一开始我试着保持简单。 我有一个maven项目,并在资源文件夹中创建了一个config.properties。

test.abc = def

然后我使用以下代码创建了一个控制器类:

@PropertySource("classpath:config.properties")
public class Controller {

    @Value("${test.abc}")
    private String abc;

    public Controller() {
        System.out.println(abc);
    }
}

我的主要课程看起来像这样:

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class BookingdisplayApplication {
    public static void main(String[] args) {
        new Controller();
    }
}

现在,当我通过Intellij或mvnw.cmd spring-boot:run运行我的代码时,我在输出中得到null。我错了什么?

3 个答案:

答案 0 :(得分:0)

您的控制器的生命周期是由Spring管理的吗?您可能需要将@Controller注释添加到类或定义此类的bean。

编辑: 我认为更好的方法是使用构造函数注入:

Controller.java:

public class Controller {

    private String abc;

    public Controller(String abc) {
        this.abc = abc;
        System.out.println(abc);
    }
}

BookingdisplayApplication.java:

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class BookingdisplayApplication {

    // instantiating bean via Spring:
    @Bean
    public Controller controller(@Value("${test.abc}") String testAbc) {
        return new Controller(testAbc);
    }

    public static void main(String[] args) {
        SpringApplication.run(BookingdisplayApplication.class, args);
    }
}

如果使用属性文件

,也不需要使用@PropertySource注释
[src-root]/application.properties 

(在源根目录中),Spring会自动找到它。

答案 1 :(得分:0)

试试这段代码:

@Configuration
@PropertySource("classpath:config.properties")
public class AppConfig {

    @Value("${test.abc}")
    private String abc;

  //Used in addition of @PropertySource
  @Bean
  public static PropertySourcesPlaceholderConfigurer   propertySourcesPlaceholderConfigurer() {
      return new PropertySourcesPlaceholderConfigurer();
  }

}

答案 2 :(得分:0)

请理解,要解决@Values中的$ {},您必须在XML或注释配置文件中注册静态PropertySourcesPlaceholderConfigurer。

@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
    return new PropertySourcesPlaceholderConfigurer();
}

OR,

@Autowired
private org.springframework.core.env.Environment env;

//define in your class or method
String abc = env.getProperty("test.abc");