弹簧 - 使用注释设置属性值,而无需使用属性文件



我有一个bean类,例如

class Sample {
    private String message;
    public void setMessage(String message) {
        this.message = message;
    }
    public String getMessage() {
        return message;
    }
}

我想设置此属性的值。

在XML配置中,我可以做

<bean id = "sample" class = "Sample"
    <property name = "message" value = "Hello there!"/>
</bean>

如何实现相同的目标,即使用Java注释设置属性的值?现在,我已经读到,我们可以使用某些属性文件使用@Value注释,但是如果不使用属性文件,可以按照XML文件进行操作?或使用属性文件是必要的

我能够通过在设置器方法上方加入@Value("Hello there!")来做到这一点。但是我觉得这不是一个好主意。如何使用Java注释为不同实例设置属性值?

谢谢。

插入@Value中的值可以来自属性文件以外的其他地方,例如它也可以使用系统属性。

在此处使用指南作为起点应该可以帮助您更好地了解。

作为基本的,大多是无用的用法示例,我们只能注入"字符串 从注释到字段的值":

@Value("string value")
private String stringValue;

使用@propertysource注释允许我们与值一起工作 来自带有@Value注释的属性文件。在下面的 示例我们将分配给字段的"从文件中获取":

@Value("${value.from.file}")
private String valueFromFile;

我们还可以从具有相同语法的系统属性设置值。 假设我们已经定义了一个名为SystemValue的系统属性 并查看以下样本:

@Value("${systemValue}")
private String systemValue;

可以为可能不为的属性提供默认值 定义。在此示例中,将注入"某些默认值"的值:

@Value("${unknown.param:some default}")
private String someDefault;

您有一些选择,具体取决于您的要求。在这两个示例中,您都可以在设置器上而不是字段设置注释。

自定义Propertysource

这使您可以继续使用@Value,以更大的控制权对提供属性的方式进行更大的控制。有大量的PropertySource实现,但是您可以随时创建自己的。

参考:

  • 如何将自定义属性源添加到Spring的环境
  • PropertySource Javadoc

示例:

@Configuration
class MyConfiguration {
  @Bean
  PropertySource myPropertySource(ConfigurableEnvironment env) {
    MapPropertySource source = new MapPropertySource("myPropertySource", singletonMap("myPropertyValue", "example"));
    env.getPropertySources().addFirst(source);
    return source;
  }
}
class Sample {
  @Value("${myPropertyValue}")
  private String message;
  public String getMessage() {
    return message;
  }
}

弦豆

将bean定义为字符串,并使用其预选赛自动线。

示例:

@Configuration
class MyConfiguration {
  @Bean
  String myPropertyValue() {
    String value;
    // do something to get the value
    return value;
  }
}
class Sample {
  @Autowired
  @Qualifier("myPropertyValue")
  private String message;
  public String getMessage() {
    return message;
  }
}

最新更新