如何通过@Value注释强制进行属性注入?

时间:2015-06-16 10:49:39

标签: java spring spring-annotations

我使用@ConfigurationProperties注释从属性文件中填充了以下Test.java POJO类。我已经看到使用@Required注释使其成为强制性的。

不是在setter方法级别定义注释,@Value注释中是否有任何注释或选项可用于定义Mandatory,NotNull等条件?

@Component
@ConfigurationProperties(prefix = "com.test")
public class Test {
  private String name;

  @Required
  public void setName(String name) {
    name = name;
  }

  public String getName(String name) {
    name = name;
  }
}

这是使特定属性成为强制性的唯一方法吗?我可以将这些注释用于此类条件或验证的目的是什么?

2 个答案:

答案 0 :(得分:3)

您可以对属性使用验证,而不是按照您设想的方式。 你可以做的是在字段(或设置器)本身上使用标准验证注释(如@NotNull等)。

例如

@NotNull
@Size(min=2, max=10)
private String name;

查看文档的this部分

文档基本上说的是,您只需要在类路径上具有兼容的JSR303验证器实现,并使用相关的注释。 Spring Boot将负责其余的工作

答案 1 :(得分:1)

根据Spring docs(目前为4.1.6.RELEASE),Value注释只有一个属性value,包含属性的值。你可以在其中放置一个Spring EL表达式,但是这不会让你明确地表达像非null的概念。

此外,在您的代码段中,您使用@ConfigurationProperties这是配置属性值的替代方法,与@Value注释相比。

您正在这样做,您的Java getter / setter名称需要映射到属性名称,即前缀“com.test”+ getName() / setName()匹配属性{{1} } 因此,您不需要com.test.name=...注释来告诉Spring要使用哪个属性。

使用@Value方法,您的getter / setter不必匹配属性名称,但您必须注释每个属性,例如@Value在课堂上,@Value("${com.test.name}")注释指向包含@PropertySource的属性文件

我发现了一些包含代码示例的博客文章,这些帖子使用两种不同的方式来注入相同的属性:http://blog.codeleak.pl/2014/09/using-configurationproperties-in-spring.htmlhttp://blog.codeleak.pl/2014/09/testing-mail-code-in-spring-boot.html