Spring - 使用注释设置属性值而不使用属性文件

时间:2018-02-10 02:37:45

标签: java spring spring-annotations

我刚刚开始使用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设置不同实例的属性值?

感谢。

2 个答案:

答案 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而不是字段上设置注释。

自定义PropertySource

这使您可以继续使用@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;
  }
}

String Bean

将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;
  }
}