el java常量_使用常量解析属性时如何在@Value中使用Spring-EL

我正在尝试使用常量来定义属性,然后使用@Value注释解析它。

我在接口中定义了常量:

public interface InternalConstant{

public static final String JOB_NAME_PROPERTY = "javabatch.jobName";

}

我正在使用springboot,并将属性作为默认属性添加到上下文中:

SpringApplication springApp = new SpringApplication(configs.toArray());

Properties props = new Properties();

props.setProperty(InternalConstants.JOB_NAME_PROPERTY, "MyStartableJob");

springApp.setDefaultProperties(props);

现在,我想使用@Value将字符串“

MyStartableJob”注入到字符串中。但是@Value(value="${javabatch.jobName}),我不想直接使用,而是使用定义的常量。

我试过了

@Value(value="#{T(ch.mobi.javabatch.core.internal.InternalConstants).JOB_NAME_PROPERTY}")

但是,当然,这只能解析为“ javabatch.jobName”,而不能解析为名为“ javabatch.jobName”的属性的值。

因此,我尝试将其包装在中@Value(value="${#{T(ch.mobi.javabatch.core.internal.InternalConstants).JOB_NAME_PROPERTY}}"),但这会导致异常。

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder '#{T(ch.mobi.javabatch.core.internal.InternalConstants).JOB_NAME_PROPERTY}' in string value "${#{T(ch.mobi.javabatch.core.internal.InternalConstants).JOB_NAME_PROPERTY}}"

at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)

at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)

at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:204)

at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:178)

at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:175)

at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:801)

at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:955)

at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942)

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)

... 16 more

我知道,我可以简单地注入Environment并使用其getProperty方法:

@Autowired

private Environment env;

public void m1() {

env.getProperty(InternalConstants.JOB_NAME_PROPERTY);

}

这行得通,符合我的目的。但是我想知道,是否也可以在@Value中使用SPEL完成此操作。

谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值