gpt4 book ai didi

java - 导入要在 Spring XML 和 SpEL 中使用的类

转载 作者:行者123 更新时间:2023-11-30 06:51:43 25 4
gpt4 key购买 nike

我很高兴在 XML 文件中使用 SpEL 来配置 Spring Beans。

但是,我想缩短这样的表达式:

<constructor-arg value = "#{ T(org.apache.commons.io.IOUtils).toString ( new java.io.FileReader ( './test.dat' ) ) }" />

有没有办法静态导入像org.apache.commons.io.IOUtils.toString()这样的方法(或者至少是 IOUtils 类),这在 Java 中是可能的吗?这在常规 XML 值中也可能吗(例如,在 <bean class = "..." > 中)?

更新

Artem's answer下面是一个很好的方法,特别是定义实例化实用程序类的新 bean 的方法。也许值得强调的是,即使 IOUtils 有私有(private)构造函数,Spring 也允许您这样做。

最佳答案

该功能名为 SpEL-function :

public class SpELFunctionBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
beanFactory.setBeanExpressionResolver(new StandardBeanExpressionResolver() {

@Override
protected void customizeEvaluationContext(StandardEvaluationContext evalContext) {
evalContext.registerFunction("ioToString",
IOUtils.class.getDeclaredMethod("toString", new Class[] { FileReader.class }));
}

});
}

}

并将其注册为上下文中的 bean。

最后你的表情会是这样的:

"#{ #ioToString( new java.io.FileReader ( './test.dat' ) ) }"

更新

另一个解决方案就像具有这些实用方法的普通 bean:

<bean id="myUtility" class="...">
...

"#{ myUtility.toString('./test.dat') }"

并执行该类中已有的所有硬逻辑。

关于java - 导入要在 Spring XML 和 SpEL 中使用的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42634676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com