如果使用@Value注释从属性文件注入参数,如何调用函数

时间:2019-08-26 12:28:02

标签: java spring-boot

我刚接触Spring,看到了这种从属性文件中解析方法参数的方法...

public void setUserDetails(@Value("${user.first.name}")String userName,
  @Value("${user.address}") String address) {
    this.userName = userName;
    this.address = address;
}

但是每当我调用此函数时,值就会被传递给函数的值所代替。我想知道如何调用该函数,以便从属性文件中获取值。

我正在调用类似...的函数

setUserDetails("abc","xyz")
setUserDetails("abc",null)
setUserDetails(null,"xyz")
setUserDetails(null,null)  
setUserDetails(null)       // invalid
setUserDetails()      // invalid

每次我得到的都不是属性数据提供的。请帮我找到一些解决方案或一些参考链接,可能会有所帮助...

2 个答案:

答案 0 :(得分:1)

https://stackoverflow.com/a/21769581/679240所述,该注释不会干扰方法的手动调用;而是在实例化bean之后立即自动调用该方法。

如手册所述:

  

在构造任何bean之后,调用任何配置方法之前立即注入字段。 [...] Bean属性设置器方法(在这种情况下)实际上只是这种常规config方法的特例。

答案 1 :(得分:1)

Spring注释在bean创建时起作用,而不是在方法调用期间起作用。假设您的班级叫UserDetails

@Component
public class UserDetails{
 public @Value("${user.first.name}") String userName;
 public @Value("${user.address}") String address;
}