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

Spring-Smart-DI

参考文章

作用

用注解的方式动态切换实现类实现方式。
比如我们有多个消息中间件或多个短信服务商,需要动态切换的时候,无需自己写判断逻辑来进行服务商的切换。只用一套注解就可以解决问题

开始使用

引入依赖

<dependency><groupId>io.github.burukeyou</groupId><artifactId>spring-smart-di-all</artifactId><version>0.2.0</version>
</dependency>
下载不下来需要拿到jar包打入本地仓库
mvn install:install-file -Dfile=D://spring-smart-di-all-0.2.0.jar -DgroupId=io.github.burukeyou -DartifactId=spring-smart-di-all -Dversion=0.2.0 -Dpackaging=jar

jar包在我的下载里面有上传

开启注解使用

package com.dino;import com.burukeyou.smartdi.annotations.EnableSmartDI;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;@Slf4j
@EnableSmartDI
@SpringBootApplication
public class DinoOaApp {public static void main(String[] args) {log.info("====== Business Starting... ======");ConfigurableApplicationContext ctx = null;try {ctx = new SpringApplicationBuilder(DinoOaApp.class).web(WebApplicationType.SERVLET).run(args);log.info("====== Business Started! ======");} catch (Exception e) {if (ctx != null) {log.error("Business application start failed and exit: {}", e.getMessage(), e);System.exit(SpringApplication.exit(ctx));}}}
}

实现类实现

定义实现类
package com.dino.business.sms;import com.burukeyou.smartdi.proxyspi.spi.EnvironmentProxySPI;
import com.dino.utils.sms.SmsSendRequest;@EnvironmentProxySPI("${sms.impl}")
public interface SmsService {Boolean sendSms(String mobile);
}
实现实现类
package com.dino.business.sms.impl;import com.burukeyou.smartdi.annotations.BeanAliasName;
import com.dino.business.sms.SmsService;
import com.dino.utils.sms.SmsSendRequest;
import com.dino.utils.sms.SmsUtils;
import org.springframework.stereotype.Component;import javax.annotation.Resource;/*** 阿里短信发送*/
@BeanAliasName("ali")
@Component
public class AliSmsServiceImpl implements SmsService {@Resourceprivate SmsUtils smsUtils;@Overridepublic Boolean sendSms(String mobile) {return smsUtils.sendAliSMS(mobile);}
}
package com.dino.business.sms.impl;import com.burukeyou.smartdi.annotations.BeanAliasName;
import com.dino.business.sms.SmsService;
import com.dino.utils.sms.SmsSendRequest;
import com.dino.utils.sms.SmsUtils;
import org.springframework.stereotype.Component;import javax.annotation.Resource;/*** 创蓝短信发送*/
@BeanAliasName("cl")
@Component
public class ClSmsServiceImpl implements SmsService {@Resourceprivate SmsUtils smsUtils;@Overridepublic Boolean sendSms(String mobile) {return smsUtils.sendClSms(mobile);}
}

配置文件配置

# 短信类型  阿里:ali  创蓝 cl
sms:impl: cl
接口调用@AutowiredProxySPIprivate SmsService smsService;public Boolean sendSmsCode(String mobile) {     return smsService.sendSms(mobile);}

相关文章:

Spring-Smart-DI

参考文章 作用 用注解的方式动态切换实现类实现方式。 比如我们有多个消息中间件或多个短信服务商&#xff0c;需要动态切换的时候&#xff0c;无需自己写判断逻辑来进行服务商的切换。只用一套注解就可以解决问题 开始使用 引入依赖 <dependency><groupId>io…...

Python 在树莓派上实现WIFI连接

开发语言&#xff1a;Python 硬件环境&#xff1a;树莓派 4B 运行环境&#xff1a;Raspberry Pi OS 64-bit 连接WIFI还是比较简单的&#xff0c;用了好几个Python 库都效果不怎么理想&#xff0c;最后还是使用命令的方式是最自在的 先断开当前的连接 wlan0 可以替换成你当前…...

vmware下ubuntu18.04中使用笔记本的摄像头

步骤1&#xff1a;在windows中检查相机状态 win10系统中&#xff0c;在左下的搜索栏&#xff0c;搜索“相机”&#xff0c;点击进入即可打开相机&#xff0c;并正常显示图像。 注意&#xff1a;如果相机连接到了虚拟机&#xff0c;则不能显示正常。 步骤2&#xff1a;…...

【Linux】最基本的杂项设备驱动

MISC驱动简介 misc的意思是混合、杂项的&#xff0c;因此misc驱动也叫杂项驱动。当我们板子上的某些外设无法进行分类的时候就可以使用该项驱动。 所有杂项设备都共用一个主设备号&#xff08;10&#xff09;&#xff0c;不同的子杂项设备使用不同的子设备号。 重要接口 定…...

RadioGroup RadioButton底部导航栏

参考: https://blog.csdn.net/lu202032/article/details/117632709 activity_home.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://sch…...

SQL分类中的DQL

DQL&#xff08;Data Query Language&#xff09;:数据查询语言&#xff0c;用来查询数据库中表的记录。 一、DQL语法 编写顺序 执行顺序 SELECT 字段列表 5 FROM 表名列表 1 WHERE 条件列表 2 GROUP BY 分组字段列表 3 HAVING 分组后条件列表 4 ORDER BY 排…...

1.3.ReactOS系统 PAGED_CODE 宏函数的实现

#ReactOS系统 PAGED_CODE 宏函数的实现 ReactOS系统 PAGED_CODE 宏函数的实现 文章目录 PAGED_CODE 宏函数的实现 PAGED_CODE 宏函数的实现 #ifdef DBG#define PAGED_CODE() \if (VideoPortGetCurrentIrql() > 1 /* APC_LEVEL */) \{ \VideoPortDebugPrint(Error, "V…...

【论文速看】DL最新进展20241015-目标检测、图像超分

目录 【目标检测】【图像超分】 【目标检测】 [ECCV2024] LaMI-DETR: Open-Vocabulary Detection with Language Model Instruction 论文链接&#xff1a;https://arxiv.org/pdf/2407.11335 代码链接&#xff1a;https://github.com/eternaldolphin/LaMI-DETR 现有方法通过利…...

京准电钟:NTP时间服务器让大数据时钟同步

京准电钟&#xff1a;NTP时间服务器让大数据时钟同步 京准电钟&#xff1a;NTP时间服务器让大数据时钟同步 NTP是一种用于同步网络中设备时间的协议&#xff0c;广泛用于互联网和局域网中。NTP网络时间服务器则是基于NTP协议构建&#xff0c;为网络中的设备提供时间同步服务的服…...

SSL免费证书申请(七牛云/阿里云等)

最近运维的几个项目SSL证书要过期了&#xff0c;领导一直催促着要搞&#xff0c;然后也是在网上找了各种链接、各种方式&#xff08;谨防上当受骗&#xff09;、各种收费&#xff1b; 于是我记录一下我自己生成SSL证书的过程。 前几年我依稀记得免费时间有一年以上的&#xff…...

十二、结构型(代理模式)

代理模式&#xff08;Proxy Pattern&#xff09; 概念 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;代理对象在不改变目标对象功能的前提下&#xff0c;通过控制对目标对象的访问&#xff0c;来实现延迟加载、权限控制、日志记录等功能。代…...

使用 python 下载 bilibili 视频

本文想要达成的目标为&#xff1a;运行 python 代码之后&#xff0c;在终端输入视频链接&#xff0c;可自动下载高清 1080P 视频并保存到相应文件夹。 具体可分为两大步&#xff1a;首先&#xff0c;使用浏览器开发者工具 F12 获取请求链接相关信息&#xff08;根据 api 接口下…...

DevExpress WinForms中文教程:Data Grid - 如何点击获取信息?

在使用DevExpress WinForms的Data Grid之类控件时&#xff0c;可能需要实现自定义用户交互&#xff0c;例如显示数据行的上下文菜单&#xff0c;或者在双击一行时调用编辑表单。在这些情况下&#xff0c;您需要在指定的坐标处标识网格元素。 在本教程中&#xff0c;您将学习如…...

真空牛肉滚揉机的优点:

‌真空滚揉机是一种用于食品加工的设备&#xff0c;主要用于肉类深加工&#xff0c;如肉食制品和低温火腿的生产。‌ 它通过滚揉、按压和腌制的过程&#xff0c;在真空状态下将原料肉与辅料、添加剂均匀混合&#xff0c;以提高肉制品的质量和口感‌。 真空滚揉机的工作原理是利…...

【物流配送中心选址问题】基于退火算法混合粒子群算法

课题名称&#xff1a; 基于退火算法混合粒子群算法的物流配送中心选址问题 改进方向&#xff1a;模拟退火算法优化粒子群算法 代码获取方式&#xff08;付费&#xff09;&#xff1a; 模型说明&#xff1a; 待补充 Matlab仿真结果&#xff1a; 1. 模型优化后的仿真结果 2…...

elasticsearch 8.2 版本账号密码设置及SSL设置

背景:elasticsearch 8.2 设置账号密码-CSDN博客 failed to load SSL configuration does not contain any trusted certificate entries [2024-10-08T17:06:53,704][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [node-1] uncaught exception in thread [main] org…...

git gui基本使用

一、图形化界面 二、创建新项目 创建文件&#xff0c;加入暂存区&#xff0c;提交到版本库 三、创建分支 四、合并分支 1.切换至master 五、更新分支 六、解决冲突 修改冲突&#xff0c;加入暂存区&#xff0c;提交到版本库 七、远程创建库 Gitee - 基于 Git 的代码托管和研…...

从automaxprocs库浅窥Linux容器的资源控制

automaxprocs能够自动调整Go程序中的Goroutine数量&#xff0c;以充分利用系统资源并提高程序的性能。 automaxprocs通过读取系统信息&#xff0c;如CPU核心数和Cgroups限制&#xff0c;来动态调整Goroutine的数量 automaxprocs获取CPU限额的关键方法在 // CPUQuotaToGOMAXP…...

AI 读文献(二):综述论文10倍速读和整理

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 上一篇娜姐讲了research研究论文的速度框架和效果&#xff0c; AI阅读研究论文&#xff0c;这个方法10倍速提升效率还不损失关键信息&#xff01; 学员们反馈效果很好&#x…...

【AAOS】Android Automotive 10模拟器源码下载及编译

源码下载 repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r47 repo sync -c --no-tags --no-clone-bundle 源码编译 source build/envsetup.sh lunch aosp_car_x86_64-userdebug make -j8 运行效果 emualtor Cluster Home Map All …...

3分钟掌握Magika:AI驱动的文件类型检测终极指南

3分钟掌握Magika&#xff1a;AI驱动的文件类型检测终极指南 【免费下载链接】magika 项目地址: https://gitcode.com/GitHub_Trending/ma/magika Magika是一款基于深度学习的智能文件类型检测工具&#xff0c;由Google开源&#xff0c;能够快速准确地识别各种文件的内容…...

深度解析Scratch-www:模块化架构如何支撑全球最大编程教育平台

深度解析Scratch-www&#xff1a;模块化架构如何支撑全球最大编程教育平台 【免费下载链接】scratch-www Standalone web client for Scratch 项目地址: https://gitcode.com/gh_mirrors/scr/scratch-www Scratch-www作为全球最大的少儿编程教育平台Scratch的独立Web客户…...

OpenClaw备份方案:GLM-4.7-Flash模型切换与技能迁移指南

OpenClaw备份方案&#xff1a;GLM-4.7-Flash模型切换与技能迁移指南 1. 为什么需要备份方案&#xff1f; 上周我正准备将OpenClaw的默认模型从Qwen切换到新部署的GLM-4.7-Flash时&#xff0c;突然意识到一个严重问题——如果新模型不兼容现有技能怎么办&#xff1f;这个念头让…...

Changedetection.io网页监控工具:免费开源网站变更检测终极指南

Changedetection.io网页监控工具&#xff1a;免费开源网站变更检测终极指南 【免费下载链接】changedetection.io The best and simplest free open source website change detection, website watcher, restock monitor and notification service. Restock Monitor, change de…...

GTE模型在法律文书智能检索中的突破性应用

GTE模型在法律文书智能检索中的突破性应用 1. 引言 在法律行业&#xff0c;文书检索一直是个让人头疼的问题。传统的检索方式主要依赖关键词匹配&#xff0c;但法律文书往往涉及复杂的语义关系和专业术语&#xff0c;简单的关键词搜索经常会出现"查不全"或"查…...

RDF实战指南:从入门到精通

1. RDF基础入门&#xff1a;从概念到实战 第一次接触RDF时&#xff0c;我也被那些专业术语搞得一头雾水。直到把它想象成"资源界的快递单"&#xff0c;才突然开窍——就像快递单记录着"谁寄了什么给谁"&#xff0c;RDF用主语-谓语-宾语的三元组记录着"…...

Qwen3-VL-2B为何选CPU优化?低门槛部署实战解读

Qwen3-VL-2B为何选CPU优化&#xff1f;低门槛部署实战解读 1. 引言&#xff1a;让AI看懂图片&#xff0c;其实很简单 你有没有想过&#xff0c;让AI像人一样“看懂”一张图片&#xff0c;到底需要多高的门槛&#xff1f; 过去&#xff0c;这通常意味着你需要一台价格不菲的、…...

如何高效管理Magpie窗口缩放插件:从安装到优化的完整指南

如何高效管理Magpie窗口缩放插件&#xff1a;从安装到优化的完整指南 【免费下载链接】Magpie An all-purpose window upscaler for Windows 10/11. 项目地址: https://gitcode.com/gh_mirrors/mag/Magpie Magpie作为一款强大的Windows窗口缩放工具&#xff0c;其插件系…...

双系统安装完整指南——以双Win11为例

一、安装前的准备工作 1. 硬件与系统要求 CPU&#xff1a;支持 Windows 11&#xff08;Intel 8 代 / AMD Ryzen 2000 及以上&#xff09;主板&#xff1a; 支持 UEFI支持 TPM 2.0 磁盘&#xff1a; GPT 分区格式至少 120GB 空闲空间&#xff08;建议每个系统 ≥ 80GB&#xf…...

Qwen3-TTS-1.7B效果实测:97ms端到端延迟在WebRTC实时语音链路表现

Qwen3-TTS-1.7B效果实测&#xff1a;97ms端到端延迟在WebRTC实时语音链路表现 1. 引言&#xff1a;实时语音合成的技术突破 语音合成技术正在经历一场革命性的变革。传统的TTS系统往往需要数百毫秒甚至数秒的生成时间&#xff0c;这在实时交互场景中几乎无法使用。而Qwen3-TT…...