首页 > 解决方案 > 是否需要使用 @Component 或 @Service 注释类型/类才能使用 @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 初始化吗?

标签: javaenumsspring-annotations

解决方案


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

一般来说,通过使用更改或添加特性到声明的 bean 的 Spring 工作processor,只有当它是一个 bean@Transactional@Value才会生效,是的,你可以在任何类中注释任何方法并且代码将编译但 Spring 不会简单地考虑它。

来自@Value文档

请注意,@Value 注释的实际处理是由 BeanPostProcessor 执行的


推荐阅读