我刚刚开始使用Spring。对不起,如果这听起来像一个愚蠢的问题。 我有一个bean类,例如
res = res[1:,1:]
# or
res[0,:] = False
res[:,0] = False
我想设置此属性的值。
在Xml配置中,我可以
class Sample {
private String message;
public void setMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
如何使用Java Annotation实现相同的功能,即设置属性的值?现在我已经读过我们可以使用某些属性文件来使用@Value注释但是如果不使用属性文件就不能这样做,按照我通过xml文件的方式进行操作?或者使用属性文件必要?
我能够通过将<bean id = "sample" class = "Sample"
<property name = "message" value = "Hello there!"/>
</bean>
包含在setter方法之上来实现。但我觉得这不是一个好主意。如何使用Java Annotations设置不同实例的属性值?
感谢。
答案 0 :(得分:0)
插入@Value
的值可以来自属性文件以外的位置,例如它也可以使用系统属性。
使用指南here作为起点可以帮助您更好地理解。
作为一个基本且无用的用法示例,我们只能注入“string” 值“从注释到现场:
@Value("string value") private String stringValue;
使用@PropertySource注释允许我们使用值 来自具有@Value注释的属性文件。在下面的 例如,我们获得了分配给该字段的“从文件中获取的值”:
@Value("${value.from.file}") private String valueFromFile;
我们还可以使用相同的语法设置系统属性的值。 假设我们已经定义了一个名为systemValue的系统属性 并查看以下示例:
@Value("${systemValue}") private String systemValue;
可以为可能不属于的属性提供默认值 定义。在此示例中,将注入值“some default”:
@Value("${unknown.param:some default}") private String someDefault;
答案 1 :(得分:0)
根据您的要求,您有几个选择。在这两个示例中,您都可以在setter而不是字段上设置注释。
这使您可以继续使用@Value
来更好地控制属性的提供方式。有大量PropertySource
实现,但您始终可以创建自己的。{/ p>
参考文献:
示例:
@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定义为String并使用其限定符自动连接它。
示例:
@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;
}
}