繁体   English   中英

类型/类是否需要用@Component 或@Service 注释才能用@Value 注释它的属性

[英]Does a type/class need to be annotated with @Component or @Service in order to annotate it's properties with @Value

我们有以下代码,它对我们有用,我们可以通过 application.properties 设置可见的值

public enum Checker {
  RED ("#FF0000"),
  YELLOW ("#FFFF00");

  private final String value;

  @Value("${visible:true}")
  private String visible;

  private Checker(final String value) {
    this.value = value;
  }

  public String getValue() { 
    if (visible) {
      return value; 
    }
    else {
      return "#000000";
    }
  }
}

现在,为了更好地理解它,在能够进行值注入之前,它不应该被 Bean 初始化吗?

答案是肯定的,但不完全是。 正确的说法是类实例需要是一个 spring bean 才能被@Value工作。 添加@Component@Service使类成为 spring 托管 bean,但还有其他使用@Bean

一般来说,spring 工作是通过使用processor更改或添加特性到您声明的 bean 中,与@Transactional相同, @Value仅在它是 bean 时才生效,是的,您可以在任何类中注释任何方法,代码将编译,但 spring 会简单不考虑。

来自@Value 文档

注意@Value注解的实际处理是由一个BeanPostProcessor执行的

您不需要注释使用@value 注释的类,@Value 表示“从属性文件中获取值”,${visible:true} 中的 true 表示如果属性文件中不存在默认值

为了更好地理解@component,看一下这个话题:@component在spring中有什么用?

对于@value 的用法,您可以查看 Baeldung 的这篇文章: https ://www.baeldung.com/spring-value-annotation

Baeldung 网站对于 Spring Boot 信息非常有用! 我建议你把它加入书签;)

我希望我能帮上一点忙!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM