目前我正在学习使用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。我错了什么?
答案 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");