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

Spring Boot Starter介绍

前言

大概10来年以前,当时springboot刚刚出现并没有流行,当时的Java开发者们开发Web应用主要是使用spring整合springmvc或者struts、iBatis、hibernate等开发框架来进行开发。项目里一般有许多xml文件配置,其中配置了很多项目中需要用到的Bean,扫描的路径等等,类似下面这样:
https://www.chengpei.top/upload/spring-xml.png
看起来很麻烦,但是相比于让我们自己在代码里自己构建各种对象,自己的set各种属性,自己维护大量对象的依赖关系使用,这样预先配置交给Spring管理,后续采用依赖注入的方式在需要的地方拿来使用的方式,已经是相当的舒服了。

SpringBoot

SpringBoot框架的命名关键在"Boot"上,或许Boot Spring更能说明这个微框架设计的初衷,也就是快速启动一个Spring应用。快在哪里呢,这里如果我们要在项目里整合Redis,则只需要添加如下的依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

然后添加上redis的连接参数,就可以需要操作Redis的地方注入RedisTemplate对象来使用了,不需要在xml中配置RedisConnectionFactoryRedisTemplate等相关依赖的类了。

spring-boot-autoconfigure

这里有个比较关键的依赖spring-boot-autoconfigure,里面有一个RedisAutoConfiguration

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {@Bean@ConditionalOnMissingBean(name = "redisTemplate")public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {RedisTemplate<Object, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);return template;}@Bean@ConditionalOnMissingBeanpublic StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {StringRedisTemplate template = new StringRedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;}
}

这里的@ConditionalOnClass是一个基于条件的配置,在满足条件时会加载当前配置类,类似的注解在org.springframework.boot.autoconfigure.condition包下还有许多,例如:
@ConditionalOnClass
@ConditionalOnBean
@ConditionalOnMissingClass
@ConditionalOnMissingBean
@ConditionalOnProperty

有了这些注解的配合,我们就可以结合@EnableAutoConfigurationn实现基于条件的自动配置了。
SpringBoot之所以能够流行,很大一部分功劳需要归功于它预先提供的一系列自动配置的依赖模块,而这些依赖模块都是基于以上注解实现的,这也意味着所有的这些依赖模块都是按需加载的,只有符合某些特定条件,这些依赖模块才会生效,这也就是我们所谓的“智能”自动配置。

spring.factories

例如以上redis自动配置的例子,这里只要环境中有RedisOperations就会自动配置Redis相关类,你可以在这个自动配置类附近找到许多这样的xxxxAutoConfiguration,很多组建都可以类似这样通过引入依赖后直接使用,但是如果只有自动配置类的话,其实这个类也不会被加载,因为我们在启动SpringBoot应用时,使用的@SpringBootApplication注解,他只会自动扫描当前包以及子包下的类,如果扫描不到自然也不会加载了,所以这里还要配合META-INF/spring.factories文件,文件中配置了所有需要被扫描到的自动装配类,SpringBoot应用启动时,会由SpringFactoriesLoader取读取该文件加载,这里比较像Java SPI机制,对Java SPI感兴趣也可以看看这篇博文:Java SPI机制介绍及原理分析
以上就是SpringBoot核心功能Starter的一个介绍,下一篇博文(实现一个自己的spring-boot-starter,基于SQL生成HTTP接口)我会基于这个原理实现一个自己的SpringBootStarter模块,只要引入了该模块,项目就自然具有了通过配置SQL自动生成Http接口的能力。

相关文章:

Spring Boot Starter介绍

前言 大概10来年以前&#xff0c;当时springboot刚刚出现并没有流行&#xff0c;当时的Java开发者们开发Web应用主要是使用spring整合springmvc或者struts、iBatis、hibernate等开发框架来进行开发。项目里一般有许多xml文件配置&#xff0c;其中配置了很多项目中需要用到的Be…...

vue和reacts数据响应式的差异

Vue 的数据响应式&#xff1a; 原理&#xff1a; Vue 使用 Object.defineProperty 或 Proxy&#xff08;在 Vue 3 中&#xff09;来实现数据的响应式。当创建 Vue 实例时&#xff0c;会对 data 对象中的属性进行遍历&#xff0c;将其转换为响应式属性。对于 Object.definePro…...

OpenEuler学习笔记(九):安装 OpenEuler后配置和优化

安装OpenEuler后&#xff0c;可以从系统基础设置、网络配置、性能优化等方面进行配置和优化&#xff0c;以下是具体内容&#xff1a; 系统基础设置 更新系统&#xff1a;以root用户登录系统后&#xff0c;在终端中执行sudo yum update命令&#xff0c;对系统进行更新&#xf…...

npm命令与yarn命令的区别

npm与Yarn的区别详解 在软件开发中&#xff0c;npm和Yarn都是流行的包管理工具&#xff0c;它们各自拥有独特的特性和优势。以下是它们的主要区别&#xff1a; 1. 安装速度 npm&#xff1a;安装速度相对较慢&#xff0c;尤其是在依赖项较多的情况下。Yarn&#xff1a;采用并…...

python如何导出数据到excel文件

python导出数据到excel文件的方法&#xff1a; 1、调用Workbook()对象中的add_sheet()方法 wb xlwt.Workbook() ws wb.add_sheet(A Test Sheet) 2、通过add_sheet()方法中的write()函数将数据写入到excel中&#xff0c;然后使用save()函数保存excel文件 ws.write(0, 0, 1234…...

MYSQL学习笔记(五):单行函数(字符串、数学、日期时间、条件判断、信息、加密、进制转换函数)讲解

前言&#xff1a; 学习和使用数据库可以说是程序员必须具备能力&#xff0c;这里将更新关于MYSQL的使用讲解&#xff0c;大概应该会更新30篇&#xff0c;涵盖入门、进阶、高级(一些原理分析);这一篇是讲解单行函数&#xff0c;当然mysql函数很多哈&#xff0c;只有多用才能记得…...

Grafana系列之Dashboard:新增仪表板、新增变量、过滤变量、变量查询、导入仪表板、变量联动、Grafana Alert

概述 关于Prometheus和Grafana的安装&#xff0c;略过。 写在前面 Dashboard&#xff1a;仪表板&#xff0c;可包含多个PanelPanel&#xff1a;面板&#xff0c;Dashboard中的组件 如有写得不对的地方&#xff0c;烦请指出。 新增仪表板 点击右上角的 选择New dashboard…...

(java版本)基于Misty1算法的加密软件的实现-毕业设计

一、基于Misty1算法的加密软件&#xff08;Java&#xff09;的实现 随着计算机网络及通信技术的飞速发展&#xff0c;信息安全成了信息社会急需解决的最重要的问题之一&#xff0c;密码技术是保证信息安全的核心技术。本文用JAVA语言开发了一个基于Misty1算法的加密软件&#x…...

Spring注解篇:@RestController详解

全文目录&#xff1a; 开篇语前言摘要概述源码解析使用案例分享代码分析使用场景优缺点分析测试用例 应用场景案例优缺点分析核心类方法介绍测试用例测试用例分析使用场景优缺点分析测试用例 小结总结文末 开篇语 哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c…...

C++:将字符数组rkpryyrag,每个字母转换为其前面第13个字母后输出,如果超过a则从z再继续接着数。例如:b前面第1个字母是a。a前面第3个字母是x。

代码如下&#xff1a; #include <iostream> #include <string> using namespace std;int main(){string str "rkpryyrag";for (int i 0; i < str.length(); i){if (str[i] > a && str[i] < z){if (str[i] - a < 13){cout <<…...

《探秘鸿蒙Next:人工智能助力元宇宙高效渲染新征程》

在元宇宙的宏大愿景中&#xff0c;高效的渲染技术是构建沉浸式虚拟世界的关键。鸿蒙Next凭借与人工智能的深度融合&#xff0c;为元宇宙的渲染带来了全新的解决方案和无限可能。 智能场景分析与优化 人工智能能够对元宇宙场景进行智能分析。鸿蒙Next可以利用AI技术对场景中的…...

微前端qiankun的部署

微前端qiankun的部署 本地开发主应用配置启动端口子应用配置启动端口测试环境部署:场景 1:主应用和微应用部署到同一个服务器(同一个 IP 和端口)微应用都放在在一个特殊名称(不会和微应用重名)的文件夹下主应用配置子应用配置配置nginx本地开发 主应用配置启动端口 打开…...

HTML表格-掌握表格标签与属性

HTML表格是网页设计中用于展示数据的强大工具&#xff0c;它通过一系列标签和属性来控制表格的布局和样式。 一、HTML表格的基本结构 HTML表格由<table>标签定义&#xff0c;内部包含多个行&#xff08;<tr>&#xff09;、单元格&#xff08;<td>或<th&…...

PID控制的优势与LabVIEW应用

PID控制&#xff08;比例-积分-微分控制&#xff09;已在工业控制领域得到广泛应用&#xff0c;尤其在实时控制和自动化系统中&#xff0c;其核心优点是简单、稳定且高效。尽管许多现代控制方法&#xff08;如自适应控制、模型预测控制等&#xff09;逐渐崭露头角&#xff0c;P…...

全球化趋势与中资企业出海背景

1. 全球化趋势与中资企业出海背景 1.1 全球经济格局变化 全球经济格局正经历深刻变革&#xff0c;新兴经济体崛起&#xff0c;全球产业链重塑&#xff0c;中资企业出海面临新机遇与挑战。据世界银行数据&#xff0c;新兴市场和发展中经济体在全球 GDP 中占比已超 40%&#xff…...

Oracle之RMAN备份异机恢复(单机到单机)

Oracle之RMAN备份异机恢复&#xff08;单机到单机&#xff09; 一、环境说明二、正式库进行RMAN备份三、将正式库备份与参数文件拷贝到测试库四、测试库异机恢复五、验证数据 一、环境说明 系统版本主机名DB版本DB名实例名Public-IP正式库Redhat9.5lemonEnterprise 19.25lemon…...

Servlet快速入门

Servlet 由于目前主流使用SpringBoot进行开发Servlet可以说是时代的眼泪&#xff0c;这篇文章主要介绍我基于SpringBoot对应Servlet的浅薄认知&#xff0c;有利于更好的理解前端界面和java服务器的数据交换过程 快速入门 我比较推荐这篇文章来对Servlet有一个大概的了解 都2…...

深入解析 Linux 内核中的 InfiniBand 驱动接口:ib_verbs.h

InfiniBand(IB)是一种高性能、低延迟的网络互连技术,广泛应用于高性能计算(HPC)、数据中心和云计算等领域。Linux 内核通过 InfiniBand 子系统提供了对 IB 设备的支持,而 ib_verbs.h 是 InfiniBand 驱动开发中的核心头文件之一。它定义了 IB 核心框架与用户空间接口(ver…...

vulnhub靶场【kioptrix-1靶机】

前言 靶机&#xff1a;kioptrix-1&#xff0c;IP地址为192.168.1.104 攻击&#xff1a;kali&#xff0c;IP地址为192.168.1.16 都采用虚拟机&#xff0c;网卡为桥接模式 文章中涉及的靶机&#xff0c;来源于vulnhub官网&#xff0c;想要下载&#xff0c;可自行访问官网下载&…...

Linux 6.14 内核的主要特性

原文参考&#xff1a;https://www.kernel.org/ Linux 6.14 内核是 Linux 内核的一个重要版本&#xff0c;预计于 2025 年 3 月发布。该版本引入了多项新特性和改进&#xff0c;涵盖了硬件支持、性能优化、安全性增强以及新技术的整合。 1. Rust 语言驱动的正式支持 Linux 6.1…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...