将 ${my.property} 计算为 @Value 注释中的 SpEL 表达式

2024-03-17

长话短说:

有没有办法解释由以下结果产生的字符串${my.property}作为一个 SpEL 表达式@Value不使用转换器的注释,例如就像是@Value("#{${my.property}})?


我有一个抽象工厂(简化的),可以让我构建一些公共对象,这些对象是我的系统配置的一部分。

@Component
public class Factory {
  public Product makeVal(int x) { return new Product(5); }
}

为了更灵活,我想让用户在中编写SpEL表达式app.properties文件,以便可以直接访问工厂:

my.property = @Factory.makeVal(12)

现在,在需要此属性的类中,为了实现我的目标,我编写了以下代码。

@Value("#{${my.property}}")
private Product obj;

我以为${my.property}将被宏观展开,然后由#{}作为相应的 SpEL 表达式,@Factory.makeVal(12)在上面的例子中。不幸的是,情况并非如此,加载 Spring 上下文会导致错误,指出它无法转换字符串(属性的值${my.property}) 到目标类型Product.

现在,我通过编写一个类来解决这个问题Converter<String, Product>,但它非常复杂,因为我需要通过实例化以编程方式将字符串评估为 SpEL 表达式ExpressionParser等等。

但有没有更简单的解决方案呢?是否有一个单一的 SpEL 表达式可以放入@Value让我简单评估的注释${my.property}作为 SpEL 表达式本身,可以吗?


也许只是更换的问题@Factory with 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;
        }
    }
}    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 ${my.property} 计算为 @Value 注释中的 SpEL 表达式 的相关文章

  • 以相反的顺序打印任何集合中的项目?

    我在 使用 Java 进行数据结构和问题解决 一书中遇到以下问题 编写一个例程 使用 Collections API 以相反的顺序打印任何 Collection 中的项目 不要使用 ListIterator 我不会把它放在这里 因为我想让有
  • Java LostFocus 和 InputVerifier,按反向制表符顺序移动

    我有一个 GUI 应用程序 它使用 InputVerifier 在产生焦点之前检查文本字段的内容 这都是很正常的 然而 昨天发现了一个问题 这似乎是一个错误 但我在任何地方都找不到任何提及它的地方 在我将其报告为错误之前 我想我应该问 我在
  • 我们可以有条件地声明 spring bean 吗?

    有没有一种方法可以有条件地声明 Spring bean 例如
  • 有人用过 ServiceLoader 和 Guice 一起使用吗?

    我一直想通过我们的应用程序 构建系统进行更大规模的尝试 但更高的优先级不断将其推到次要地位 这似乎是加载 Guice 模块的好方法 并且避免了关于 硬编码配置 的常见抱怨 单个配置属性很少会自行更改 但您几乎总是会有一组配置文件 通常用于不
  • 无法使用 datastax java 驱动程序通过 UDT 密钥从 cassandra 检索

    我正在尝试使用用户定义的类型作为分区键将对象存储在 cassandra 中 我正在使用 datastax java 驱动程序进行对象映射 虽然我能够插入到数据库中 但无法检索该对象 如果我更改分区键以使用非 udt 例如文本 我就能够保存和
  • 为什么用scala写的代码比用java写的慢6倍?

    我不确定我在编写 scala 代码时是否犯了一些错误 问题是 The four adjacent digits in the 1000 digit number that have the greatest product are 9 9
  • 未装饰窗户的 Windows Snap 功能?

    有谁知道如何允许未装饰的窗户使用此功能 唯一的选择就是重新实施它 有任何想法吗 谢谢 可停靠可能是唯一的JToolBar http docs oracle com javase tutorial uiswing components too
  • getCurrentSession 在网络中休眠

    我正在使用 hibernate 和 jsp servlet 编写一个基于 Web 的应用程序 我读过有关sessionFactory getCurrentSession and sessionFactory openSession方法 我知
  • Java AES 256 加密

    我有下面的 java 代码来加密使用 64 个字符密钥的字符串 我的问题是这会是 AES 256 加密吗 String keyString C0BAE23DF8B51807B3E17D21925FADF273A70181E1D81B8EDE
  • 使用 JDBC 连接到 PostgreSql 的本地实例

    我在 Linux 机器上有一个正在运行的 PostgreSql 本地实例 当我使用psql来自 shell 的命令我成功登录 没有任何问题 我需要通过 JDBC 连接到 PostgreSql 但我不知道我到底应该传递什么url参数为Driv
  • 无法验证 Spring Security 中 url 模式的角色

    我正在使用 spring security 3 1 7 RELEASE 和 spring 3 2 13 RELEASE 我的 spring security xml 中有如下条目
  • 使用@Transactional注解批量插入

    在我的 Spring 应用程序中 我想一次性在数据库中插入近 1500 条记录 我在后端使用 Spring 4 X 和普通休眠 在我的服务层中 我使用 Transactional 注释 现在 在某个时间点之后插入记录时 我遇到内存不足错误
  • Joshua Bloch 的构建器设计模式有何改进?

    早在 2007 年 我就读过一篇关于 Joshua Blochs 所采用的 构建器模式 的文章 以及如何修改它以改善构造函数和 setter 的过度使用 特别是当对象具有大量属性 其中大部分属性是可选的 时 本文对此设计模式进行了简要总结
  • 我们如何使用 thymeleaf 绑定对象列表的列表

    我有一个表单 用户可以在其中添加任意数量的内容表对象这也可以包含他想要的列对象 就像在 SQL 中构建表一样 我尝试了下面的代码 但没有任何效果 并且当我尝试绑定两个列表时 表单不再出现 控制器 ModelAttribute page pu
  • java实现excel价格、收益率函数[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我所有的 java 应用程序现在都会抛出 java.awt.headlessException

    所以几天前我有几个工作Java应用程序使用Swing图书馆 JFrame尤其 他们都工作得很好 现在他们都抛出了这个异常 java awt headlessexception 我不知道是什么改变了也许我的Java版本不小心更新了 谢谢你尽你
  • 使用 Apache 允许 Glassfish 和 PHP 在同一服务器中协同工作

    是否可以建立从 Java 到 php 文件的桥梁 我有一个用 Java 编写的应用程序 我需要执行http piwik org http piwik org 这是用 PHP 编写的 在服务器中 我正在运行 PHP 但无法从浏览器访问 php
  • Selenium 单击在 Internet Explorer 11 上不起作用

    我尝试在 Internet Explorer 上单击 selenium 但它不起作用 我努力了element click moveToElement element click build perform javascript没事了 事实上
  • 使用 DBCP 配置 Tomcat

    在闲置一段时间 几个小时 后 我们收到了 CommunicationsException 来自 DBCP 错误消息 在异常中 位于这个问题的末尾 但我没有看到任何配置文件中定义的 wait timeout 我们应该看哪里 在 tomcat
  • 在会话即将到期之前调用方法

    我的网络应用程序有登录的用户 有一个超时 在会话过期之前 我想执行一个方法来清理一些锁 我已经实现了sessionListener但一旦我到达public void sessionDestroyed HttpSessionEvent eve

随机推荐

  • 使用 ASP.NET 5 中的默认 DI 容器一次性注册所有服务,类似于 Autofac

    对于 ASP NET 5 已经默认提供了一个 DI 它看起来很有趣 我一直在使用 Autofac 和 MVC 5 它可以选择一次注册所有程序集 下面是在 Autofac 中注册所有以 Service 结尾的类的示例代码 Autofac Co
  • React 和 Typescript 与 webpack 打字问题

    我正在尝试创建一个asyncComponent使用 TypeScript 构建高阶组件 但无法完全获得正确的类型 本质上 这可以在 JS 和 webpack 中工作 const Auth asyncComponent gt require
  • 在 ASP.NET MVC3 RC2 中显示复杂类型

    我有一个使用复杂类型作为属性的模型 namespace Web Models public class Business IModel Key HiddenInput DisplayValue false public Guid ID ge
  • 如何查询从 varchar 类型获取最大 id 和数字中的值?

    我有表和列 ID 值为 1 2 3 10 11 12 13 如何查询 varchar 类型的最大 id 我曾尝试过 select MAX id from table 但结果是9 请帮忙 看起来这些值是字符串 它选择最大的字符串 如果您希望它
  • 将 SQLite 设置为 Laravel 5.1 中单元测试的数据库

    我正在尝试在 Laravel 5 1 中设置单元测试 继文档 http laravel com docs 5 1 testing我看到这个 Laravel 在构建时就考虑到了测试 其实支持测试 PHPUnit 是开箱即用的 and 运行测试
  • CSS Div 背景图像固定高度 100% 宽度

    我正在尝试设置一系列具有背景图像的 div 每个 div 都有自己的固定高度 并拉伸以填充宽度 即使顶部 底部被剪切的溢出也是如此 我只是不想要边缘有空白 目前 我有 http jsfiddle net ndKWN http jsfiddl
  • 如何获取java中创建的日期图片

    我想提取 jpg 文件的创建日期 Java 有 File 对象的 lastModified 方法 但似乎不支持从文件中提取创建日期 我相信这些信息存储在文件中 因为当我将鼠标指针悬停在 Win XP 中的文件上时看到的日期与我在 DOS 中
  • 派生类的成员函数是否继承了基类的虚拟性?

    假设我们有以下两个类 A 是具有虚拟析构函数的基类 B 是其析构函数没有 virtual 限定符的派生类 我的问题是 如果我要从 B 派生更多类 B 的析构函数是否会自动继承虚拟性 或者我需要在 B class A public A std
  • Heroku 已成功部署,但我仍然没有运行任何 Web 进程

    我正在尝试将电报机器人推入 Heroku 这些是我的文件夹中的文件 new bot requirements txt Procfile worker python new bot py init py empty new bot py en
  • Zend Framework 路由:参数数量未知

    我正在尝试为 N 级类别深度编写一条路线 因此 通常的类别 URL 如下所示 http website my category my subcategory my subcategory level3 my subcategory leve
  • (UWP) 将网格另存为 png

    我正在开发一个 UWP 应用程序 它有一个带有子项 图像和文本块的网格 我有两件事想要实现并需要帮助 如何使用预定义名称将 Grid 元素及其子内容作为图像 最好是 PNG 保存在本地文件夹中 如何检索此保存的图像 然后将其作为附件与其他兼
  • 为什么这个简单的连接查询使用子查询会明显更快?

    我有两张桌子 order details这是 100 000 行 并且outbound即 10 000 行 我需要加入他们的专栏order number 两者都是 VARCHAR 50 order number 在出站表中不唯一 CREAT
  • 如何根据返回值执行不同的查询?

    我有一个足球比赛列表 定义如下 id datetime status gameweek round id home team id 1 2019 03 31 00 00 00 1 29 12696 1243 2 2019 03 31 00
  • 如何在Python中获取所有直接子目录

    我正在尝试编写一个简单的Python脚本 它将所有子目录中的index tpl复制到index html 有一些例外 我因尝试获取子目录列表而陷入困境 import os def get immediate subdirectories a
  • 在两个不同的头文件中的两个结构中包含循环依赖项是否错误?

    我有一个非常大的程序无法编译 我怀疑它与跨结构的循环依赖关系有关 当我像下面这样编码时 它不会编译 foo h ifndef FOO define FOO include bar h typedef struct foo Foo struc
  • 创建模型时用 laravel 返回模型

    我需要将保存为 json 的新模型发送到前面 但我看不到响应中的列organizationid 这是我的模型 class Organization extends Model protected table core organizatio
  • 强制纵向模式

    好吧 由于没有人回答我之前的问题 我开始相信可能没有简单的方法可以做到这一点 但我很乐观 这是我的问题 在我的应用程序中 我使用常规 UIButton 从 ViewControllerOne 切换到 ViewControllerTwo Vi
  • 用于动态创建元素的 jQuery CSS()

    我正在使用 jQuery CSS 函数来设置一些元素的样式 element css style 这是可行的 但部分元素是在页面加载后动态创建的 这应该是 element live created function this css styl
  • Code First 一对多关系的多个外键

    我在使用 Entity Framework 6 Code First Fluent API 时遇到了一些不符合惯例的问题 一个典型的例子是我有一个名为软件的实体 我不希望数据库表被称为 Softwares 它应该被称为软件 但也有一些其他的
  • 将 ${my.property} 计算为 @Value 注释中的 SpEL 表达式

    长话短说 有没有办法解释由以下结果产生的字符串 my property 作为一个 SpEL 表达式 Value不使用转换器的注释 例如就像是 Value my property 我有一个抽象工厂 简化的 可以让我构建一些公共对象 这些对象是