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 Boot为您提供了一种使用@TestPropertySource@Satyendra库马尔说得很好。但此注释只能在加载Spring容器时使用:即用于集成/社交测试。在编写普通单元测试时,您不需要加载容器。谢谢@连字符。那么,我们如何在application.yml中使用常见的SPRING引导属性呢
spring.port=8090
hi,您可以用yml格式编写任何spring属性:)获取它,兄弟。看起来yml格式清晰易读。无论如何,谢谢你,伙计!谢谢你,伙计。我想我们可以在构造函数注入中使用它。