当前位置: 首页 > 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…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...