当前位置: 首页 > news >正文

27. Spring源码篇之SpEL表达式之自定义解析模版

简介

其实前面文章我们已经介绍过了如何定义spring表达式的解析模版,但是那是直接使用表达式api的形式,对于使用spring的同学来说,更优雅的方式就是可以自定义一个扩展去修改

本文就是介绍如何通过Spring的扩展点修改表达式解析模版

自定义解析模版

首先AbstractBeanFactory就有有一个解析器BeanExpressionResolver,这个前面文件介绍过,默认是一个StandardBeanExpressionResolver

public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport implements ConfigurableBeanFactory {private BeanExpressionResolver beanExpressionResolver;public BeanExpressionResolver getBeanExpressionResolver() {return this.beanExpressionResolver;}
}

而StandardBeanExpressionResolver恰好也有修改解析版本的方法

public class StandardBeanExpressionResolver implements BeanExpressionResolver {public void setExpressionPrefix(String expressionPrefix) {this.expressionPrefix = expressionPrefix;}public void setExpressionSuffix(String expressionSuffix) {this.expressionSuffix = expressionSuffix;}
}

那么其实就是对BeanFactory的一个扩展,在spring中针对于BeanFactory的后置处理器就是 BeanFactoryPostProcessor

下面我们就来实现一下

@Component
public class SpElPostProcessor implements BeanFactoryPostProcessor {@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {BeanExpressionResolver beanExpressionResolver = beanFactory.getBeanExpressionResolver();if (beanExpressionResolver instanceof StandardBeanExpressionResolver) {StandardBeanExpressionResolver resolver = (StandardBeanExpressionResolver) beanExpressionResolver;// 修改resolver.setExpressionPrefix("&{");resolver.setExpressionSuffix("}");}}
}

修改表达式模版为 &{}

测试

@ComponentScan({"com.shura"})
public class AppConfig {
}public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);BeanExpressionResolver beanExpressionResolver = context.getBeanFactory().getBeanExpressionResolver();Object result = beanExpressionResolver.evaluate("&{appConfig}", new BeanExpressionContext(context.getBeanFactory(), null));System.out.println(result);
}输出
com.shura.config.AppConfig@3e58a80e

欢迎关注,学习不迷路!

相关文章:

27. Spring源码篇之SpEL表达式之自定义解析模版

简介 其实前面文章我们已经介绍过了如何定义spring表达式的解析模版,但是那是直接使用表达式api的形式,对于使用spring的同学来说,更优雅的方式就是可以自定义一个扩展去修改 本文就是介绍如何通过Spring的扩展点修改表达式解析模版 自定义…...

100天精通Python(可视化篇)——第109天:Pyecharts绘制各种常用地图(参数说明+代码实战)

文章目录 专栏导读一、地图应用场景二、参数说明1. 导包2. add函数 三、地图绘制实战1. 省市地图2. 中国地图3. 中国地图(带城市)4. 中国地图(分段型)5. 中国地图(连续型)6. 世界地图7. 行程轨迹地图8. 人口…...

bugku 渗透测试

场景1 查看源代码 场景2 用dirsearch扫描一下看看 ok看到登录的照应了第一个提示 进去看看 不出所料 随便试试admin/admin进去了 在基本设置里面看到falg 场景3 确实是没啥想法了 找到php在线运行 检查网络,我们发现这个php在线运行会写入文件 那我们是不是写…...

WordPress用sql命令批量删除所有文章

有时我们需要将一个网站搬迁到另一个服务器。我们只想保留网站的模板样式,而不需要文章内容。一般情况下我们可以在后台删除已发表的文章,但如果有很多文章,我们则需要一次删除所有文章。 WordPress如何批量删除所有文章 进入网站空间后台&a…...

树状数组 / pbds解法 E2. Array Optimization by Deque

Problem - 1579E2 - Codeforces Array Optimization by Deque - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 树状数组解法 将 a i a_i ai​插入到队头,贡献为:原队列中所有比 a i a_i ai​小的数的数量将 a i a_i ai​插入到队尾,贡献为&a…...

原神「神铸赋形」活动祈愿现已开启

亲爱的旅行者,「神铸赋形」活动祈愿现已开启,「单手剑静水流涌之辉」「法器碧落之珑」概率UP! 活动期间,旅行者可以在「神铸赋形」活动祈愿中获得更多武器与角色,提升队伍的战斗力! 〓祈愿时间〓 4.2版本更…...

php使用Session实现简单购物车功能

一个简单的商城购物车功能。它使用了PHP的会话(Session)来存储购物车数据,通过调用不同的函数来实现添加商品、移除商品、更新商品数量以及清空购物车的功能 session_start();// 初始化购物车 if (!isset($_SESSION[cart])) {$_SESSION[cart] array(); }// 添加商品…...

【JavaScript】alert的使用方法 | 超详细

alert作用效果 alert&#xff08;&#xff09;方法用于显示带有一条指定消息和一个确认的按钮的警告框。 alert使用方法 方法一&#xff1a;直接写在script标签内 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"&…...

总结Vue3里一些常见的组合式api

一&#xff1a;前言 二&#xff1a;常见api 1、ref 和 reactive 这两个组合式 api 是在 Vue3 开发中最为常见的两个 api &#xff0c;主要是将一个非响应式的数据变为响应式数据。 ref作用: 定义一个数据的响应式 语法: const xxx ref(initValue):创建一个包含响应式数据的引…...

C_5练习题

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案&#xff0c;并将所选项前的字母填写在答题纸的相应位置上。) 1.以下不正确的C语言标识符是(&#xff09; A. AB1 B._ab3 C. char D. a2_b 若 x、i、j、k都是 int型变量&#…...

【采坑分享】导出文件流responseType:“blob“如何提示报错信息

目录 前言&#xff1a; 采坑之路 总结&#xff1a; 前言&#xff1a; 近日&#xff0c;项目中踩了一个坑分享一下经验&#xff0c;也避免下次遇到方便解决。项目基于vue2axioselement-ui&#xff0c;业务中导出按钮需要直接下载接口中的文件流。正常是没有问题&#xff0c;但…...

机器学习算法——主成分分析(PCA)

目录 1. 主体思想2. 算法流程3. 代码实践 1. 主体思想 主成分分析&#xff08;Principal Component Analysis&#xff09;常用于实现数据降维&#xff0c;它通过线性变换将高维数据映射到低维空间&#xff0c;使得映射后的数据具有最大的方差。主成分可以理解成数据集中的特征…...

01、copilot+pycharm

之——free for student 目录 之——free for student 杂谈 正文 1.for student 2.pycharm 3.使用 杂谈 copilot是github推出的AI程序员&#xff0c;将chatgpt搬到了私人终端且无token限制&#xff0c;下面是使用方法。 GitHub Copilot 是由 GitHub 与 OpenAI 合作开发的…...

一般将来时

一般将来时 概念 表示将要发生的动作或打算、计划准备做某事 时间 tomorrow 明天 the day after tomorrow 后天 next week 下周 next weekend 下周末 next month 下个月 next year 明年 ...句子结构 主语 be&#xff08;am/is/are&#xff09;going to do … 计划,…...

【古诗生成AI实战】之四——模型包装器与模型的训练

在上一篇博客中&#xff0c;我们已经利用任务加载器task成功地从数据集文件中加载了文本数据&#xff0c;并通过预处理器processor构建了词典和编码器。在这一过程中&#xff0c;我们还完成了词向量的提取。 接下来的步骤涉及到定义模型、加载数据&#xff0c;并开始训练过程。…...

redis实现消息延迟队列

业务场景 在很多软件系统功能中都会出现定时任务的业务场景,比如提前点单,比如定时发布动态,文章等而出现这样的的定时的任务为延迟队任务 代码模块 任务的持久化一般都需要建立一个任务表和任务日志表,避免宕机导致任务失效,先新建立一个数据库,创建基本的任务表和任务日志表…...

keyof

// 在TypeScript中&#xff0c;keyof是一个操作符&#xff0c; // 它允许你从一个类型中提取所有的可枚举属性名&#xff0c;并将它们组成一个联合类型。 // 例如&#xff0c;假设你有这样一个类型&#xff1a; type Person { firstName: string; lastName: string; age: n…...

Centos 7 更改 PostgreSQL 14 默认存储路径

前言&#xff1a; 默认PostgreSQL数据存储路径为&#xff1a;/var/lib/pgsql/14/data 迁移到新的存储路径&#xff1a;/mnt/postgresql/data 1、关闭PostgreSQL服务 systemctl stop postgresql-142、创建目录 # 创建新目录 mkdir -p /mnt/postgresql/data# 更改目录权限 chow…...

深信服超融合一体机提示:内存ECC

PS&#xff1a;此事件分享主要来源于季度巡检时发现的超融合一体机红灯闪烁异常&#xff0c;接入IPMI端口查看日志发现持续提示内存ECC&#xff1b; 因为是只有3.05这一天发现了有这个告警的提示&#xff0c;所以当时清除了日志以后重启了BMC服务就解决了&#xff1b;但是如果清…...

STK Components 二次开发-地面站传感器

上一篇我们说了创建地面站&#xff0c;那么这次我们在地面站添加一些特效。 1. 创建地面站 var locationPoint1 new PointCartographic(m_earth, new Cartographic(Trig.DegreesToRadians(117.17066), Trig.DegreesToRadians(31.84056), 240.359)); m_facility new Platfor…...

分享 种 .NET 桌面应用程序自动更新解决方案云

一、Actor 模型&#xff1a;不是并发技巧&#xff0c;而是领域单元 Actor 模型的本质是&#xff1a; Actor 是独立运行的实体 Actor 之间只通过消息交互 Actor 内部状态不可被外部直接访问 Actor 自行决定如何处理收到的消息 Actor 模型真正解决的是&#xff1a; 如何在不共享状…...

浙江金华车间酷热难挡?蒸发冷省电空调能否解决降温难题?

浙江金华的夏季&#xff0c;车间内酷热难挡是许多企业面临的难题。高温不仅让员工工作体验变差&#xff0c;还可能影响生产效率。这时&#xff0c;蒸发冷省电空调成为备受关注的解决方案。蒸发冷省电空调的制冷原理有其独特之处。它需要压缩机、制冷剂进行内循环制冷。压缩机作…...

3分钟解锁B站缓存视频:m4s-converter无损转换指南

3分钟解锁B站缓存视频&#xff1a;m4s-converter无损转换指南 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾为B站下架的视频感到惋惜&…...

利用叉乘判断OpenGL中的左右关系

在 OpenGL 中&#xff0c;判断一个点或向量相对于另一个向量&#xff08;如视线方向或边&#xff09;的“左右关系”&#xff0c;本质上是一个空间方位判定问题。其核心方法是利用叉乘&#xff08;Cross Product&#xff09;的几何特性&#xff0c;结合坐标系的手性规则来实现。…...

AcousticSense AI实战应用:短视频创作者BGM流派匹配提升完播率21%

AcousticSense AI实战应用&#xff1a;短视频创作者BGM流派匹配提升完播率21% 1. 引言&#xff1a;音乐匹配如何影响短视频完播率 短视频创作者都知道一个秘密&#xff1a;背景音乐的选择直接影响观众是否愿意看完整个视频。一段不合适的BGM可能会让观众在几秒钟内划走&#…...

ComfyUI Impact Pack实战手册:从检测器配置到人脸精修的完整工作流

1. ComfyUI Impact Pack核心功能解析 第一次接触ComfyUI Impact Pack时&#xff0c;我被它强大的视觉处理能力震撼到了。这个插件包就像是给AI装上了"视觉增强镜"&#xff0c;让普通的图像处理任务变得异常简单高效。Impact Pack最核心的价值在于它集成了三大检测器&…...

解密高效网络监控:专业级开源测速工具实战指南

解密高效网络监控&#xff1a;专业级开源测速工具实战指南 【免费下载链接】Speed-Test SpeedTest by OpenSpeedTest™ is a Free and Open-Source HTML5 Network Performance Estimation Tool Written in Vanilla Javascript and only uses built-in Web APIs like XMLHttpReq…...

西门子博图V15.1与PLCSIM仿真环境搭建全流程解析

1. 西门子博图V15.1与PLCSIM仿真环境概述 对于工业自动化领域的工程师来说&#xff0c;西门子TIA Portal&#xff08;博图&#xff09;软件是PLC编程和调试的必备工具。V15.1版本作为长期稳定版本&#xff0c;在项目开发中应用广泛。而PLCSIM仿真器则是调试PLC程序的利器&#…...

MES验收悖论:系统越先进,验收越难——一个食品饮料行业的隐形成本陷阱

大家好&#xff0c;我是东哥说-MES &#x1f4da; 系列文章目录 &#x1f513; 免费试读篇 - [第1篇&#xff1a;免费试读]() ✅ 可立即阅读 &#x1f512; 粉丝专享篇&#xff08;2-n篇需关注后解锁&#xff09; - [第2篇&#xff1a;进阶应用]() ⭐ 需关注 - [第…...

终极指南:如何用Bitfocus Companion将普通控制器变身高性价比专业控制台

终极指南&#xff1a;如何用Bitfocus Companion将普通控制器变身高性价比专业控制台 【免费下载链接】companion Bitfocus Companion enables the Elgato Stream Deck and other controllers to be a professional shotbox surface for an increasing amount of different pres…...