当前位置: 首页 > 知识库问答 >
问题:

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

苏嘉歆
2023-03-14

例如,我有一个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(“你好!” 在setter方法上方。但我觉得这不是个好主意。如何使用Java注释为不同的实例设置属性值?

谢谢


共有2个答案

南门新知
2023-03-14

根据您的要求,您有几个选择。在这两个示例中,您可以在setter而不是字段上设置注释。

这使您可以继续使用@Value,更好地控制属性的提供方式。有大量的Properties tySource实现,但是您总是可以创建自己的。

参考资料:

  • 如何添加自定义属性源到Spring的环境
  • 属性资源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;
  }
}
金成济
2023-03-14

插入到@value中的值可以来自属性文件以外的位置,例如,它也可以使用系统属性。

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

作为一个基本且基本无用的用法示例,我们只能将注释中的“字符串值”注入字段:

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

使用@Properties tySource注释,我们可以使用@Value注释处理属性文件中的值。在以下示例中,我们将获得分配给字段的“从文件中获得的值”:

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

我们还可以使用相同的语法从系统属性中设置值。让我们假设我们已经定义了一个名为system Value的系统属性,并查看以下示例:

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

可以为可能未定义的属性提供默认值。在本例中,将注入值“某些默认值”:

@Value("${unknown.param:some default}")
private String someDefault;
 类似资料:
  • 我想根据“配置文件”设置注释的值。 让我举个例子来解释; 在上面的例子中,我们可以看到活动的“配置文件”是PROD,但是假设我们想要使用DEV配置文件,我们将不得不注释来自PROD的@Table注释,并取消注释DEV@Table注释。 如果这只针对一个实体,那不会是一个问题,但我有很多实体都有这种情况,所以我不认为这是处理这种即兴“简介”的方式。 你知道有什么办法可以解决这种情况吗?

  • 尝试使用spring绑定属性文件中的int值 它也不起作用。 请建议什么是使它工作的方法。

  • 我有一个Spring的豆子,定义为: 但是,属性< code > prop . loyalty . expering . points . time zone 导致< code > TypeMismatchException 出现以下消息: org.springframework.beans。TypeMismatchException:无法将类型“java.lang.String”的属性值转换为所

  • 我想使用自定义Java注释,使用Spring AOP(和/或AspectJ)在私有类属性中插入一个值。快速示例: 我的注释。java: MyController.java: 我的方面。java: 我将调用并进入,在它返回后,我希望在控制台或日志中看到“helloworld”。我想使用AOP将var1设置为自定义值。用MyAnnotation注释的任何属性变量都将设置为“helloworld”。我希

  • 我在我的一个项目中有这个注释类。 注释类由我定义。 问题:我可以代替String使用一些属性 ,其值在编译时未知,但仅在运行时未知吗? 作为参考,这里是我的注释类型的定义。

  • 问题内容: 配置 : Spring 2.5,Junit 4,Log4j 从系统属性中指定log4j文件位置 在运行时,使用-D java选项设置系统属性。一切都很好。 问题/我需要什么: 在单元测试时,未设置系统属性,并且文件位置未解析。 App使用Spring,想简单地配置Spring以 设置 系统属性。 更多信息: 要求仅用于配置。无法引入新的Java代码或IDE中的条目。理想情况下,Spri