是否需要使用@Component或@Service注释类型/类,以便使用@Value注释其属性

问题描述 投票:1回答:2

我们有以下代码,它对我们有用,我们可以通过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吗?

java enums spring-annotations
2个回答
0
投票

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

为了更好地了解@component,请查看以下主题:What's the use of @Component in spring?

有关@value的用法,您可以阅读Baeldung的这篇文章:https://www.baeldung.com/spring-value-annotation

Baeldung网站对于春季引导信息非常有用!我建议您为它添加书签;)

希望我能有所帮助!


0
投票

答案是肯定的,但不完全是。正确的说法是,该类实例必须是bean,才能成为@Value才能工作。添加@Component@Service使类成为Spring托管bean,但是还有其他使用@Bean的方法。

通常,通过更改或向声明的Bean添加功能来进行春季工作,与@Transactional相同,@Value仅在是Bean时才生效,是的,您可以注释任何类中的任何方法,并且代码可以编译,但是spring会简单地不考虑它。

来自@Value documentation

请注意,@ Value批注的实际处理是由BeanPostProcessor

© www.soinside.com 2019 - 2024. All rights reserved.