spring常用语法


etl表达式解析

if (rawValue != null && rawValue.startsWith("#{") && entryValue.endsWith("}")) {
   // assume it's spel
   StandardEvaluationContext context = new StandardEvaluationContext();
   context.setBeanResolver(new BeanFactoryResolver(beanFactory));
   Expression expression = parser.parseExpression(entryValue,
         new TemplateParserContext());
   value = expression.getValue(context);
}

属性绑定
Bindable<T> bindable = Bindable.of(this.configurable.getConfigClass());T t =new Binder(propertySources, null, conversionService).bindOrCreate(configurationPropertyName, bindable, handler);

 ApplicationContext context = SpringApplication.run(Application.class, args);
 
        Binder binder = Binder.get(context.getEnvironment());


绑定简单配置 

  FooProperties foo = binder.bind("com.didispace", Bindable.of(FooProperties.class)).get();
        System.out.println(foo.getFoo());
  

绑定List配置

      List<String> post = binder.bind("com.didispace.post", Bindable.listOf(String.class)).get();
        System.out.println(post);
 
        List<PostInfo> posts=binder.bind("com.didispace.posts",Bindable.listOf(PostInfo.class)).get();
        System.out.println(posts);
        // 读取配置       System.out.println(context.getEnvironment().containsProperty("com.didispace.database-platform"));
  System.out.println(context.getEnvironment().containsProperty("com.didispace.databasePlatform"));

配置绑定到Map对象
Map<String, DsConfig> dsMap = binder.bind("demo.dynamic", Bindable.mapOf(String.class, DsConfig.class)).get();
System.out.println("Map Config: " + dsMap);
配置转换处理

  

String decPwd = binder.bind("demo.enc.pwd", Bindable.of(String.class)).map(s -> new String(Base64Utils.decodeFromString(s))).get();
System.out.println("解码之后的数据是: " + decPwd);
注册绑定过程回调


String dec = binder.bindOrCreate("demo.enc.pwd", Bindable.of(String.class), new BindHandler() {
    @Override
    public <T> Bindable<T> onStart(ConfigurationPropertyName name, Bindable<T> target, BindContext context) {
        System.out.println("开始绑定: " + name);
        return BindHandler.super.onStart(name, target, context);
    }

    @Override
    public Object onSuccess(ConfigurationPropertyName name, Bindable<?> target, BindContext context, Object result) {
        System.out.println("绑定成功!" + name + " val:" + target.getValue() + " res: " + result);
        return new String(Base64Utils.decodeFromString((String) result));
    }

    @Override
    public Object onCreate(ConfigurationPropertyName name, Bindable<?> target, BindContext context, Object result) {
        System.out.println("创建: " + name + " val:" + target.getValue() + " res: " + result);
        return BindHandler.super.onCreate(name, target, context, result);
    }

    @Override
    public Object onFailure(ConfigurationPropertyName name, Bindable<?> target, BindContext context, Exception error) throws Exception {
        System.out.println("绑定失败! " + name + "  " + error.getMessage());
        return BindHandler.super.onFailure(name, target, context, error);
    }

    @Override
    public void onFinish(ConfigurationPropertyName name, Bindable<?> target, BindContext context, Object result) throws Exception {
        System.out.println("绑定结束: " + name + " val:" + target.getValue() + " res: " + result);
        BindHandler.super.onFinish(name, target, context, result);
    }
});
System.out.println("绑定回调: " + dec);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/662793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Task05:PPO算法

本篇博客是本人参加Datawhale组队学习第五次任务的笔记 【教程地址】https://github.com/datawhalechina/joyrl-book 【强化学习库JoyRL】https://github.com/datawhalechina/joyrl/tree/main 【JoyRL开发周报】 https://datawhale.feishu.cn/docx/OM8fdsNl0o5omoxB5nXcyzsInGe…

vs +cmake 开发的注意

vs自动生成的cmake 项目在项目顶目录会有 一个cmakepresets.json文件 在cmake文档里 该文件是对cmake的某些变量进行提前预设. 引入标头的问题: CMAKE_BUILD_TYPE 设置为Release vs不会自动给你找标头 甚至不会给你自动提示 设置为 Debug 即可 在cmake 项目里面 如果对某…

Redis的big key问题介绍以及监控手段

本文目录&#xff1a; 1、big key的定义及问题 2、2023年实际生产事故 3、监控手段 4、预防手段 &#xff08;一&#xff09;big key的定义及产生的问题 Redis 的big key是指value占用内存空间较大的键值。通常&#xff0c;针对不同的数据类型会用元素个数或者占用空间大小…

2024年混合云:趋势和预测

混合云环境对于 DevOps 团队变得越来越重要&#xff0c;主要是因为它们能够弥合公共云资源的快速部署与私有云基础设施的安全和控制之间的差距。这种环境的混合为 DevOps 团队提供了灵活性和可扩展性&#xff0c;这对于大型企业中的持续集成和持续部署 (CI/CD) 至关重要。 在混…

基于springboot+vue的阿博图书馆管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

JRE和JVM的区别

JRE&#xff08;Java Runtime Environment&#xff0c;Java运行环境&#xff09;和JVM&#xff08;Java Virtual Machine&#xff0c;Java虚拟机&#xff09;是Java运行时环境的重要组成部分&#xff0c;它们之间主要有以下区别&#xff1a; 功能不同&#xff1a;JRE是Java运行…

Pandas 数据结构 – Pandas CSV 文件

Pandas CSV 文件 CSV&#xff08;Comma-Separated Values&#xff0c;逗号分隔值&#xff0c;有时也称为字符分隔值&#xff0c;因为分隔字符也可以不是逗号&#xff09;&#xff0c;其文件以纯文本形式存储表格数据&#xff08;数字和文本&#xff09;。 CSV 是一种通用的、…

06. 【Linux教程】终端工具

Linux 终端工具 前面介绍了如何安装虚拟机&#xff0c;还介绍了如何在虚拟机上安装 CentOs 操作系统&#xff0c;并且给 CentOs 配置了局域网固定 ip&#xff0c;那么此时的 CentOs 相当于是在局域网的一台服务器了&#xff0c;虚拟机上面已经自带终端工具&#xff0c;实际业务…

上传upload及显示img图片预览、删除

上传图片文件a-upload html部分 <div className="clearfix"><a-upload:custom-request="customRequest"listType="picture-card":fileList="fileList":onPreview="handlePreview":on-remove="del">&…

day39_mysql

今日内容 0 复习昨日 1 DML 2 约束 3 DQL 0 复习昨日 1 什么是数据库(Database)? 用来组织,存储,管理数据的仓库 2 什么是数据库管理系统(Database Management System-DBMS)? 用来管理数据库的一个软件 3 数据库分类 关系型数据库,Oracle,Mysql,SqlServer,DB2非关系数据库,Re…

【android】 android->profile 查看内存泄露

目录 实例讲解 各字段解释 实例讲解 各字段解释 在 Android Studio 的 Profile 视图中&#xff0c;Arrange by Stack 用于对内存分配和释放事件进行堆栈排列&#xff0c;以便更好地了解内存使用情况。以下是表上各列的一般含义&#xff1a; 1. **Call Chart (调用图)**: …

【Qt】—— Qt Creator 创建项目

目录 &#xff08;一&#xff09;Qt Creator概览 &#xff08;二&#xff09;使⽤Qt Creator新建项⽬ &#xff08;一&#xff09;Qt Creator概览 从开始菜单或者快捷⽅式打开Qt Creator集成开发环境&#xff0c;启动之后看到类似下⾯的界⾯&#xff1a; 【解释说明】 菜单栏…

ES6中新增Array.from()函数的用法详解

目录 Map对象的转换 Set对象的转换 字符串的转换 类数组对象的转换 Array.from可以接受三个参数 ES6为Array增加了from函数用来将其他对象转换成数组。当然&#xff0c;其他对象也是有要求&#xff0c;也不是所有的&#xff0c;可以将两种对象转换成数组。 1、部署了Iter…

代码安全审计经验集(下)

对HTTP加密请求参数的测试 对于HTTP请求体加密&#xff0c;如果直接使用明文的请求参数&#xff0c;是无法进行正常的安全测试的。但通常还是有办法分析出加解密的策略&#xff0c;如果能把加解密算法还原&#xff0c;就可以先将安全测试的payload添加到原始明文参数&#xff0…

python学习_win32 实现模拟键盘输入或者鼠标移动的方法

1.方法一 参考文档 https://blog.csdn.net/qq_45664055/article/details/123573468ctypes 是一个 Python 库&#xff0c;它提供了调用 C 代码的功能。使用 ctypes 可以调用 Windows API 函数&#xff0c;包括鼠标和键盘的操作。 1.1模拟鼠标操作&#xff1a; from ctypes im…

SpringBoot统一功能处理,拦截器,统一数据格式,捕捉异常

目录 拦截器:是Spring框架提供的核心功能之一&#xff0c;主要用来拦截用户的请求&#xff0c;在指定方法前后&#xff0c;根据业务需要执行预先设定的代码: 自定义拦截器 统一数据格式&#xff0c;要包含状态码&#xff0c;错误信息​编辑 出现针对String类型的错误​​​…

【Linux C | 网络编程】netstat 命令图文详解 | 查看网络连接、查看路由表、查看统计数据

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

MBP 2015安装Ubuntu 22.04.3系统后摄像头驱动问题解决

# 表示root用户, 如果更喜欢 sudo 也可以使用 sudo$ 表示普通用户 安装缺失的Ubuntu依赖以解压固件 (# apt install xz-utils curl cpio make)解压和安装固件请参考 Firmware extraction.安装依赖: (# apt-get install linux-headers-generic git kmod libssl-dev checkinsta…

【Java万花筒】选择你的武器:移动开发的多面利器大揭秘

Java移动开发全景图&#xff1a;从Android SDK到跨平台框架一网打尽 前言 移动应用开发正迎来飞速发展的时代&#xff0c;选择合适的开发库成为开发者关注的焦点。本文深入探讨了多个Java库&#xff0c;涵盖Android SDK、RoboVM、Codename One、Xamarin、Flutter以及React Na…

【AI数字人-论文】Geneface论文

文章目录 前言pipelineaudio-to-motionMotion domain adaptation可视化 Motion-to-imageHead-NeRFTorso-NeRF 结果对比 前言 语音驱动的说话人视频合成旨在根据一段输入的语音&#xff0c;合成对应的目标人脸说话视频。高质量的说话人视频需要满足两个目标&#xff1a; &#…