我有一个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;
}
}