目的是避免硬编码。
使用场合一: controller 读取配置文件(@Value)
- 准备配置文件
以 application.properties 为例。
web.images-path=D:\\IdeaProjects\\images
-
在controller类加注解
@PropertySource("classpath:application.properties")
-
在属性上,加 @Value注解。
@Value("${web.images-path}") private String filePath;
-
然后在service里,使用 @Autowired注入。即可使用这些自定义的属性值。
使用场合二: 通过实体类读取配置文件
有配置文件如下
实体类和配置文件的key对应。
#测试配置文件注入 test.domain=www.xdclass.net test.name=springboot
import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; @Data @Component @PropertySource("classpath:application.properties") public class ServerSettings { //名称 @Value("${test.name}") private String name; // 域名 @Value("${test.domain}") private String domain; }
另外 考虑 前缀取值的做法。
@ConfigurationProperties(prefix="test")
如果读取配置文件失败:
默认Spring框架实现会从声明 @ComponentScan 所在的类的package进行扫描,来自动注入,因此启动类最好放在根路径下面,或者指定扫描包范围。