Java 在spring boot中添加属性值的正确方法是什么
我正在尝试使用Java 在spring boot中添加属性值的正确方法是什么,java,spring-boot,annotations,Java,Spring Boot,Annotations,我正在尝试使用controller中的application.properties文件值。使用下面的代码 @Value("${app.baseURL}") private final String BaseUrl; 我找到了另一种方法 @Controller public class userController { String BaseUrl; public userController(@Value("app.baseURL")String BaseUrl) {
controller
中的application.properties
文件值。使用下面的代码
@Value("${app.baseURL}")
private final String BaseUrl;
我找到了另一种方法
@Controller
public class userController {
String BaseUrl;
public userController(@Value("app.baseURL")String BaseUrl) {
this.BaseUrl= BaseUrl;
}
}
有效的方法是什么?如果字段很少,则在字段级别而不是方法级别使用@Value。如果必须使用的属性数量最多,请使用autowire环境
@Value("${app.baseURL}")
private final String BaseUrl;
自动连线环境
@Autowired
Environment env;
env.getProperty("some-strProp")
使用环境按键获取属性值的步骤
@Autowired
Environment env;
env.getProperty("some-strProp")
什么是有效的方法
没有比这更有效的了。第一个使用字段注入,第二个使用构造函数注入 我认为在设计上有很大的不同。
第一个将
BaseUrl
设置为类的客户端无法设置的内部依赖项。只有春天可以。在大多数情况下,这是一个坏主意,因为它隐藏了类依赖关系。
这种设计的一个常见问题是单元测试。
在编写单元测试时,必须使用简单自然的方法来设置被测试实例的依赖项。
如何在不可访问的字段中执行此操作?
反射也不好。
第二个代码的构造函数注入是一种更好的方法 如果有许多属性彼此属于,那么也可以使用属性类 application.yml:
your:
properties:
root:
path: "/root/path/to/resource"
enabled: true
timeout: 10
java类:
@ConfigurationProperties("your.properties.root")
public class MyProperties {
private String path;
private boolean enabled;
private int timeout;
//getter & setter
}
使用构造函数注入访问属性:
@Service
public class MyService {
private final MyProperties properties;
@Autowired
public MyService(MyProperties properties) {
this.properties = properties;
}
}
@Validated
@ConfigurationProperties("your.properties.root")
public class MyProperties {
@NotEmpty
private String path;
@NotNull
private Boolean enabled;
@Min(1)
private int timeout;
//getter & setter
}
spring.port=8090
hi,您可以用yml格式编写任何spring属性:)获取它,兄弟。看起来yml格式清晰易读。无论如何,谢谢你,伙计!谢谢你,伙计。我想我们可以在构造函数注入中使用它。