长话短说:
是否有一种方法可以将${my.property}
生成的字符串解释为@value
注释中的SpEL表达式,而不使用转换器,例如@value(“#{${my.property}}
)?
@Component
public class Factory {
public Product makeVal(int x) { return new Product(5); }
}
my.property = @Factory.makeVal(12)
@Value("#{${my.property}}")
private Product obj;
我认为${my.property}
将被宏展开,然后由#{}
计算为对应的SpEL表达式,上面示例中的@factory.makeval(12)
。不幸的是,情况并非如此,加载Spring上下文会导致一个错误,说明它无法将字符串(属性的值${my.property}
)转换为目标类型product
。
现在,我通过编写一个实现转换器
的类来解决这个问题,但这非常复杂,因为我需要通过实例化ExpressionParser
等以编程方式将字符串计算为SpEL表达式。
但是有没有更简单的解决方案呢?请问,是否有一个SpEL表达式可以放在@value
注释中,让我简单地将${my.property}
作为SpEL表达式计算?
也许这只是将属性值中的@factory
替换为factory
的问题。这个测试对我来说是通过的:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { SpelTest.Config.class })
public class SpelTest
{
@Value("#{${my.property}}")
Product _product;
@Test
public void evaluating_spel_from_property_value() throws Exception
{
Assert.assertEquals(1234, _product.value);
}
@Component
public static class Factory
{
public Product makeVal(int x) { return new Product(x); }
}
public static class Product
{
public final int value;
public Product(final int value) { this.value = value; }
}
@Configuration
@ComponentScan(basePackageClasses = SpelTest.class)
public static class Config
{
@Bean
public Factory factory() { return new Factory(); }
@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
final PropertySourcesPlaceholderConfigurer psc = new PropertySourcesPlaceholderConfigurer();
final MutablePropertySources sources = new MutablePropertySources();
sources.addFirst(new MockPropertySource()
.withProperty("my.property",
"factory.makeVal(1234)"));
psc.setPropertySources(sources);
return psc;
}
}
}
问题内容: 我正在尝试使用SpEL根据我定义的一些规则将同一文档加载到不同的集合中。 因此,从我所拥有的开始: -首先文件: -秒我有应该提供集合名称的提供者bean: 问题是,当我尝试将文档插入应由提供程序生成的特定集合中时,我得到以下stacktrace: org.springframework.expression.spel.SpelEvaluationException:EL1057E :
我是Spring新手,尝试在使用注释的控制器内使用注释注入一个字符串,并且我的字符串的值被评估为字符串,而不是属性文件内的值。 下面是我的控制器,带有我要注入的字符串“消息”。 我的应用程序上下文如下所示: 我的属性文件包含以下行: Spring必须在某个点上获取该值,因为每当我将更改为不在属性文件中的值(如)时,我都会得到一个异常。
使用DevTools控制台的求值计算功能,探测页面上任何项的状态。 DevTools控制台允许您以特别的方式了解页面中项的状态。他可以计算JavaScript的任何表达式,控制台本身支持几个功能。 TL;DR 计算键入的表达式。 使用其中一个快捷方式选择元素。 使用 inspect()检查DOM元素和JavaScript对象。 使用$0 - 4访问最近选择的元素和对象。 操作表达式 在控制台中输入
我试图用Spring框架构建一个控制台应用程序。 我有一个由注释的类: 和由注释的类 但是,当我在中定义属性并使用默认配置文件时,属性将被分配。
我使用的是spring boot 2.2.6,正如文档所说:
主要内容:示例,SpEL对Bean定义的支持,SpEL中的运算符,SpEL中的变量Spring Expression Language(简称 SpEL)是一种功能强大的表达式语言,支持运行时查询和操作对象图 。表达式语言一般是用最简单的形式完成最主要的工作,以此减少工作量。 Java 有许多可用的表达式语言,例如 JSP EL,OGNL,MVEL 和 JBoss EL,SpEL 语法类似于 JSP EL,功能类似于 Struts2 中的 OGNL,能在运行时构建复杂表达式、存取