在 Spring 框架中,EmbeddedValueResolverAware 接口是一个回调接口,用于获取 EmbeddedValueResolver 对象,该对象可用于解析占位符表达式。
源码如下
2. 作用该接口的主要作用是允许 Bean 在运行时获取 EmbeddedValueResolver 对象,从而解析包含在 Bean 定义中的占位符表达式。
3. 使用要让一个Bean实现 EmbeddedValueResolverAware 接口,需要按以下步骤进行
3.1 创建并实现接口 package org.example.cheney;import org.springframework.context.EmbeddedValueResolverAware;import org.springframework.util.StringValueResolver;public class DemoBean implements EmbeddedValueResolverAware {@Overridepublic void setEmbeddedValueResolver(StringValueResolver resolver) {String result = resolver.resolveStringValue("Hello, ${user.name}!");System.out.println("【EmbeddedValueResolverAware】 解析的占位符是: " + result);}} 3.2 配置 Bean <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="demoBean" class="org.example.cheney.DemoBean" /></beans> 3.3 创建启动类 package org.example.cheney;import org.springframework.context.support.AbstractXmlApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class App {public static void main(String[] args) {String location = "applicationContext.xml";try (AbstractXmlApplicationContext context = new ClassPathXmlApplicationContext(location)) {System.out.println("End.");}}} 3.4 启动输出结果:
此处显示的是系统环境变量的计算机用户名
4. 应用场景EmbeddedValueResolverAware 接口通常用于以下场景:
解析占位符:
当一个 Bean 需要在运行时解析包含在配置文件或注解中的占位符表达式
动态构建字符串:
通过解析占位符,Bean可以动态构建字符串,根据不同的属性值生成最终的字符串
总结EmbeddedValueResolverAware 接口为开发者提供了一种获取EmbeddedValueResolver对象的机会,该对象可用于解析占位符表达式。通过实现该接口,Bean 可以在初始化阶段获取解析占位符的能力,从而更灵活地处理一些与动态属性值相关的逻辑。