c 网站设计/深圳seo优化公司哪家好
如何通过Spring提供的EL表达式执行bean的属性或方法?
关键两个bean:
org.springframework.expression.Expression
org.springframework.expression.spel.support.StandardEvaluationContext
实例:
import cn.hutool.extra.spring.SpringUtil;
import org.springframework.beans.factory.BeanExpressionException;
import org.springframework.beans.factory.config.BeanExpressionContext;
import org.springframework.context.expression.*;
import org.springframework.core.convert.ConversionService;
import org.springframework.core.convert.support.DefaultConversionService;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.ParserContext;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import org.springframework.expression.spel.support.StandardTypeConverter;
import org.springframework.expression.spel.support.StandardTypeLocator;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestScope;import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;@Component
public final class CustomSpringBeanExpressionEvaluator {private final Map<String, Expression> expressionCache = new ConcurrentHashMap<>(256);private final Map<BeanExpressionContext, StandardEvaluationContext> evaluationCache = new ConcurrentHashMap<>(8);private final ExpressionParser parser = new SpelExpressionParser();private BeanExpressionContext beanExpressionContext;public static Object evaluate(@NonNull String expression) {return SpringUtil.getBean(CustomSpringBeanExpressionEvaluator.class).doEvaluate(expression);}/*** SpringEL表达式解析** @param expression - EL表达式*/public Object doEvaluate(@NonNull String expression) {if (!StringUtils.hasLength(expression)) {return expression;}try {Expression expr = this.expressionCache.get(expression);if (expr == null) {expr = this.parser.parseExpression(expression, this.beanExpressionParserContext);this.expressionCache.put(expression, expr);}if (this.beanExpressionContext == null) {this.beanExpressionContext = new BeanExpressionContext(SpringUtil.getConfigurableBeanFactory(), new RequestScope());}StandardEvaluationContext sec = this.evaluationCache.get(beanExpressionContext);if (sec == null) {sec = new StandardEvaluationContext(beanExpressionContext);sec.addPropertyAccessor(new BeanExpressionContextAccessor());sec.addPropertyAccessor(new BeanFactoryAccessor());sec.addPropertyAccessor(new MapAccessor());sec.addPropertyAccessor(new EnvironmentAccessor());sec.setBeanResolver(new BeanFactoryResolver(beanExpressionContext.getBeanFactory()));sec.setTypeLocator(new StandardTypeLocator(beanExpressionContext.getBeanFactory().getBeanClassLoader()));sec.setTypeConverter(new StandardTypeConverter(() -> {ConversionService cs = beanExpressionContext.getBeanFactory().getConversionService();return (cs != null ? cs : DefaultConversionService.getSharedInstance());}));this.evaluationCache.put(beanExpressionContext, sec);}return expr.getValue(sec);} catch (Throwable ex) {throw new BeanExpressionException("Expression parsing failed", ex);}}private final ParserContext beanExpressionParserContext = new ParserContext() {@Overridepublic boolean isTemplate() {return true;}@Overridepublic String getExpressionPrefix() {return "#{";}@Overridepublic String getExpressionSuffix() {return "}";}};
}
使用示例
CustomSpringBeanExpressionEvaluator.evaluate("#{bean.fieldName}")
CustomSpringBeanExpressionEvaluator.evaluate("#{bean.methodName}")
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
如何通过Spring提供的EL表达式执行bean的属性或方法?
如何通过Spring提供的EL表达式执行bean的属性或方法? 关键两个bean: org.springframework.expression.Expression org.springframework.expression.spel.support.StandardEvaluationContext 实例: import cn.hutool.extra.spring.Spring…...
![](https://img-blog.csdnimg.cn/direct/bb5107c3b3ba4363a489081a7c56b93d.png)
SSTI 服务器端模板注入(Server-Side Template Injection)
1.【攻防世界】Web_python_template_injection {{}}是变量包裹标识符,里面存放的是一个变量,当你输入 http://61.147.171.105:55121/{{8*8}} 执行成功,说明存在模版注入。接下来,开始想办法编代码拿到服务器的控制台权限 。 首先…...
![](https://img-blog.csdnimg.cn/direct/73f0fde47ee14bd2bc314ca834adb4c9.png)
Vue.js---------Vue基础
能够说出Vue的概念和作用能够使用vue/cli脚手架工程化开发能够熟练Vue指令 一.vue基本概念 1.学习vue Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 渐进…...
![](https://www.ngui.cc/images/no-images.jpg)
力扣经典150题第一题:合并两个有序数组
目录 合并两个有序数组问题详解与解决方法1. 介绍2. 问题描述3. 解题思路4. 算法实现5. 复杂度分析6. 测试和验证7. 扩展如何处理特殊情况和边界条件?如何处理数组中可能存在的重复元素?如何优化算法以减少内存使用或提高执行效率? 8. 总结9.…...
![](https://img-blog.csdnimg.cn/direct/dd4da3bd192b4272b8c596e0367e5b2f.png)
Git:日志修改
一、问题描述 有小伙伴提出一个需求,为了满足某种需要,需要在Git日志中增加一条提交记录,并且需要指定提交时间。 比如,以下面这个only-allow项目为例,想在它的Git日志2023/9/26 19:08:08前插入一条2023/9/28 19:08:0…...
![](https://img-blog.csdnimg.cn/direct/06b4671a44bc40b3bf146762c541375e.png)
【数据库】MySQL InnoDB存储引擎详解 - 读书笔记
MySQL InnoDB存储引擎详解 - 读书笔记 InnoDB 存储引擎概述InnoDB 存储引擎的版本InnoDB 体系架构内存缓冲池LRU List、Free List 和 Flush List重做日志缓冲(redo log buffer)额外的内存池 存储结构表空间系统表空间独立表空间通用表空间undo表空间临时…...
![](https://www.ngui.cc/images/no-images.jpg)
GPT-2原理-Language Models are Unsupervised Multitask Learners
文章目录 前言GPT-1优缺点回顾GPT-1实验结果分析GPT-1缺陷分析 GPT-2训练数据OpenAI的野心预训练/微调的训练范式训练数据选择 模型结构和参数(更大的GPT-1)模型预训练训练参数 输入数据编码 总结 前言 首先强调一下,在看这篇文章之前&#…...
![](https://img-blog.csdnimg.cn/direct/6a6be53d4c5546d1aff8a1f9796b3cdb.png)
逆向案例十二——看准网企业信息json格式的信息
网址:【全国公司排行|排名榜单|哪家好】-看准网 打开开发者工具——刷新——网络——XHR——下滑页面加载新的页面——找到数据包 发现参数加密,返回的数据也进行了加密 按关键字在下方搜索 kiv进入第一个js文件 ctrlf打开文件里面的搜索框继续搜kiv找到…...
![](https://img-blog.csdnimg.cn/direct/d68015ccf3154ddba1413ce9ea8b64ae.png)
docker安装jenkins 2024版
docker 指令安装安装 docker run -d --restartalways \ --name jenkins -uroot -p 10340:8080 \ -p 10341:50000 \ -v /home/docker/jenkins:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/bin/docker:/usr/bin/docker jenkins/jenkins:lts访问…...
![](https://img-blog.csdnimg.cn/direct/b7efb86fcf304539a7e72ca66fdba292.png)
输入url到页面显示过程的优化
浏览器架构 线程:操作系统能够进行运算调度的最小单位。 进程:操作系统最核心的就是进程,他是操作系统进行资源分配和调度的基本单位。 一个进程就是一个程序的运行实例。启动一个程序的时候,操作系统会为该程序创建一块内存&a…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux(centos7)部署hive
前提环境: 已部署完hadoop(HDFS 、MapReduce 、YARN) 1、安装元数据服务MySQL 切换root用户 # 更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysqL-2022 # 安装Mysql yum库 rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm # yu…...
![](https://www.ngui.cc/images/no-images.jpg)
LeetCode | 数组 | 双指针法 | 27. 移除元素【C++】
题目链接 1. 题目描述 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑…...
![](https://img-blog.csdnimg.cn/direct/225176443ee140aab133eb79af037c83.png)
【Apache Doris】周FAQ集锦:第 2 期
【Apache Doris】周FAQ集锦:第 2 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和…...
![](https://img-blog.csdnimg.cn/img_convert/1e6c9305e233aa9d5c5295fa1ca7dcb6.png)
jQuery(二)
文章目录 1.jQuery操作节点1.查找节点,修改属性1.基本介绍2.切换图片案例 2.创建节点1.基本介绍2.内部插入3.外部插入4.小结1.插入方法说明2.两种插入方法的区别 5.插入元素实例6.移动元素实例 3.删除节点1.基本介绍2.代码实例 4.复制节点1.基本介绍2.代码实例 5.替…...
![](https://www.ngui.cc/images/no-images.jpg)
MIT6.828 实验环境安装教程
Thanks:mit6.828环境搭建 - 人云我不亦云的文章 - 知乎 https://zhuanlan.zhihu.com/p/489921553 sudo make && make install install -d -m 0755 "/share/qemu" install: 无法创建目录 “/share”: 权限不够 make: *** [Makefile:382:…...
![](https://img-blog.csdnimg.cn/direct/b27ec752c249404bbac04ef2db1affdc.gif)
一文彻底搞清 Iterator(遍历器)概念及用法
目录 一、由来及意义 二、具体实现流程 三、具有默认 Iterator 接口的数据结构 四、调用 Iterator 接口的场合 五、总结 一、由来及意义 Javascript中表示“集合”的数据结构,主要是 Array、Object、Map、Set 这四种数据集合,除此之外,…...
![](https://img-blog.csdnimg.cn/direct/b616d034ba9b421b8ba51b16f5f387f3.png)
稀疏矩阵的三元组表表示法及其转置
1. 什么是稀疏矩阵 稀疏矩阵是指矩阵中大多数元素为零的矩阵。 从直观上讲,当元素个数低于总元素的30%时,这样的矩阵被称为稀疏矩阵。 由于该种矩阵的特点,我们在存储这种矩阵时,如果直接采用二维数组,就会十分浪费…...
![](https://www.ngui.cc/images/no-images.jpg)
docker安装rabbitMQ,并且创建账号
# 创建docker容器启动,挂到后台运行 docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management # 打开防火墙 sudo firewall-cmd --zonepublic --add-port5672/tcp --permanent sudo firewall-cmd --zonepublic --add-port15672/tcp --permanent s…...
![](https://img-blog.csdnimg.cn/direct/23524493bfb94ecdaaf8399ccc9f3c22.png)
wireshark解析grpc/protobuf的方法
1,wireshark需要安装3.20以上 下载地址:https://www.wireshark.org/ 2,如果版本不对,需要卸载,卸载方法: sudo rm -rf /Applications/Wireshark.app sudo rm -rf $HOME/.config/wireshark sudo rm -rf /…...
![](https://img-blog.csdnimg.cn/direct/3187c76450c943e580b8efe32e1f8a7b.png)
软件测试用例(2)
具体的设计方法 -- 黑盒测试 因果图 因果图是一种简化的逻辑图, 能直观地表明程序的输入条件(原因)和输出动作(结果)之间的相互关系. 因果图法是借助图形来设计测试用例的一种系统方法, 特别适用于被测试程序具有多种输入条件, 程序的输出又依赖于输入条件的各种情况. 因果图…...
![](https://www.ngui.cc/images/no-images.jpg)
集群式无人机仿真环境和数据集
仿真环境和数据集 Quick StartAcknowledgementsSwarmSim Quick Start Compiling tests passed on 20.04 with ros installed. You can just execute the following commands one by one. # Download the Simulator and run it wget https://cloud.tsinghua.edu.cn/library/34…...
![](https://img-blog.csdnimg.cn/direct/e09a4ac5f9c04cc79c2127482df92ce8.png)
IPSec VPN
IP Security,IP安全 1、特点 L3的VPN 缺:不支持组播、配置复杂、延迟增加、资源消耗较多 优:具备访问控制、密码学四个维度、抗重放打击 2、组件 ①安全协议 1)验证头技术(AH) IP协议号51 提供数据完整性检查,身份验证,抗重放攻击 无法做数据的机密性 AH的完…...
![](https://img-blog.csdnimg.cn/direct/11a60d459ebb4f12b9dcfac30acb3312.png)
docker部署nacos,单例模式(standalone),使用内置的derby数据库,简易安装
文章目录 前言安装创建文件夹docker指令安装docker指令安装-瘦身版 制作docker-compose.yaml文件查看页面 前言 nacos作为主流的服务发现中心和配置中心,广泛应用于springcloud框架中,现在就让我们一起简易的部署一个单例模式的nacos,版本可…...
![](https://www.ngui.cc/images/no-images.jpg)
systemd监听服务配置文件更新自动重启服务
背景&需求 需要频繁更改一个服务的配置文件进行测试 实现 配置服务的systemd文件 vim /lib/systemd/system/xxx.service [Unit] Descriptionxxx daemon, A rule-based proxy in Go.[Service] Typesimple ExecStart/opt/xxx/xxx-d /etc/xxx/ Restartalways[Install] Wan…...
![](https://img-blog.csdnimg.cn/direct/70b62b45df4941c2b25ed90bc8628a26.jpeg#pic_center)
【yy讲解PostCSS是如何安装和使用】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...
![](https://img-blog.csdnimg.cn/direct/e4008e8f44ba4895a6a687ed5efed0d8.png)
YOLO电动车检测识别数据集:12617张图像,yolo标注完整
YOLO电动车检测识别数据集:12617张图像,电动车一类,yolo标注完整,部分图像应用增强。 适用于CV项目,毕设,科研,实验等 需要此数据集或其他任何数据集请私信...
![](https://img-blog.csdnimg.cn/direct/3256169e769b4e4599a4bdc22c4dbfbf.png)
从汇编看函数调用
文章目录 函数调用流程栈相关寄存器及的作用简介寄存器功能指令功能 栈函数的括号{}正括号反括号 参数传递传值,变量不可改传指针,变量可改C 传引用 函数调用实例 函数调用流程 目标:函数调用前后栈保持不变 保存main函数的寄存器上下文移…...
![](https://img-blog.csdnimg.cn/direct/9d06bcebc6dd4387913ac6af8fca6b8c.png)
node.js的错误处理
当我打开一个不存在的文件时,错误如下: 在读取文件里面写入console.log(err),在控制台中可以看到我的错误代码类型:文件不存在的错误代码 ENOENT。见更多错误代码---打开node.js官方API文档Error 错误 | N…...
![](https://img-blog.csdnimg.cn/direct/449b620fac1e42c2b1fe3b62a22ea249.png)
shell的编写
文章目录 1.框架2.命令行3.获取用户命令字符串4.命令行字符串分割5.执行命令和内建命令6.完整代码: 1.框架 我们知道shell是一直存在的,所以首先我们第一步就是要搭建一个框架,使其一直存在。 那么也很简单,一个while循环就可以完…...
![](https://img-blog.csdnimg.cn/direct/1009c2adb5644085b0e7a343dd779db2.gif)
css心跳动画
图标引入 <img class"icon" src"heart.svg" alt"" srcset""> CSS代码 <style>.icon {animation:bpm 1s linear,pulse 0.75s 1s linear infinite;}keyframes pulse {from,75%,to {transform: scale(1);}25% {transform:…...