SpringBoot基础详解
目录
SpringBoot自动配置
基于条件的自动配置
调整自动配置的顺序
纷杂的SpringBoot Starter
手写简单spring-boot-starter示例
SpringBoot自动配置
用一句话说自动配置:@EnableAutoConfiguration借助SpringFactoriesLoader将标准了@Configuration的JavaConfig类汇总加载到ApplicationContext。
基于条件的自动配置
在自动配置的基础上,我们可以通过@Conditional配合@Configuration或者@Bean来干预配置或者bean定义是否能够生效,类似于下面伪代码的效果:
if(符合@Conditional规定的条件) {加载当前配置或者注册当前bean的定义; }
常见的 @Conditional
注解及其作用:
-
@ConditionalOnClass:当指定的类位于类路径上时,才加载配置的 Bean。这可用于在依赖库存在时加载 Bean。
@Configuration @ConditionalOnClass(MyLibraryClass.class) public class MyConfiguration {// 配置 Bean }
-
@ConditionalOnMissingClass:与
@ConditionalOnClass
相反,当指定的类不存在于类路径上时,才加载配置的 Bean。@Configuration @ConditionalOnMissingClass("com.example.SomeClass") public class MyConfiguration {// 配置 Bean }
-
@ConditionalOnProperty:根据指定的配置属性是否存在,来加载 Bean。可用于在应用程序的属性文件中控制 Bean 的加载。
@Configuration @ConditionalOnProperty(name = "myapp.feature.enabled", havingValue = "true") public class MyConfiguration {// 配置 Bean }
-
@ConditionalOnExpression:基于 SpEL 表达式的计算结果来加载 Bean。
@Configuration @ConditionalOnExpression("${myapp.feature.enabled}") public class MyConfiguration {// 配置 Bean }
-
@ConditionalOnWebApplication:当应用程序运行在 Web 环境下(例如,Spring MVC 或 Spring Boot)时,加载配置的 Bean。
@Configuration @ConditionalOnWebApplication public class MyWebConfiguration {// 配置 Web 相关 Bean }
-
@ConditionalOnJava:当运行应用程序的 Java 版本满足指定条件时,加载 Bean。
@Configuration @ConditionalOnJava(range = ConditionalOnJava.Range.EQUAL_OR_NEWER, value = JavaVersion.EIGHT) public class MyJava8Configuration {// 配置 Java 8 相关 Bean }
调整自动配置的顺序
@AutoConfigureBefore和@AutoConfigureAfter是 Spring Boot 自动配置中的注解,它们用于控制自动配置类的加载顺序。这些注解允许我们明确指定自动配置类的加载顺序,以确保在加载自动配置类时符合特定的依赖关系。
以下是它们的作用和用法:
-
@AutoConfigureBefore:
-
@AutoConfigureBefore
注解用于指定一个或多个自动配置类,它告诉 Spring Boot 在加载当前自动配置类之前先加载指定的自动配置类。 -
这可以用于确保在当前自动配置类之前配置某些依赖,以满足特定的应用程序需求。
-
示例:
@Configuration @AutoConfigureBefore(AnotherAutoConfiguration.class) public class MyAutoConfiguration {// 配置 Bean }
-
-
@AutoConfigureAfter:
-
@AutoConfigureAfter
注解用于指定一个或多个自动配置类,它告诉 Spring Boot 在加载当前自动配置类之后加载指定的自动配置类。 -
这可以用于确保在当前自动配置类之后配置某些依赖,以满足特定的应用程序需求。
-
示例:
@Configuration @AutoConfigureAfter(AnotherAutoConfiguration.class) public class MyAutoConfiguration {// 配置 Bean }
-
纷杂的SpringBoot Starter
Spring Boot Starters 是一组官方维护的依赖关系,用于简化 Spring Boot 应用程序的配置和引导。它们旨在为特定类型的应用程序或用例提供一组默认的依赖项,以减少配置工作和提高开发效率。以下是一些常见的 Spring Boot Starters:
-
spring-boot-starter-web:用于构建 Web 应用程序的 Starter,包括 Spring MVC、嵌入式 Servlet 容器(如Tomcat或Jetty)以及其他与 Web 相关的依赖项。适用于开发 RESTful Web 服务和传统的 Web 应用程序。
-
spring-boot-starter-data-jpa:用于访问关系型数据库的 Starter,包括 Spring Data JPA、Hibernate 和数据源配置。适用于构建基于 JPA 的数据访问层。
-
spring-boot-starter-data-mongodb:用于访问 MongoDB 的 Starter,包括 Spring Data MongoDB 和 MongoDB 驱动。适用于构建使用 MongoDB 的应用程序。
-
spring-boot-starter-data-redis:用于访问 Redis 的 Starter,包括 Spring Data Redis 和 Redis 客户端。适用于构建使用 Redis 的应用程序。
-
spring-boot-starter-data-solr:用于访问 Apache Solr 的 Starter,包括 Spring Data Solr 和 Solr 客户端。适用于构建使用 Solr 的搜索应用程序。
-
spring-boot-starter-data-elasticsearch:用于访问 Elasticsearch 的 Starter,包括 Spring Data Elasticsearch 和 Elasticsearch 客户端。适用于构建使用 Elasticsearch 的搜索应用程序。
-
spring-boot-starter-security:用于添加 Spring Security 支持的 Starter,包括身份验证和授权功能。适用于构建安全的应用程序。
-
spring-boot-starter-test:用于测试 Spring Boot 应用程序的 Starter,包括JUnit、Spring Test、Mockito 和其他测试框架。适用于单元测试和集成测试。
-
spring-boot-starter-actuator:用于添加 Spring Boot Actuator 支持的 Starter,包括监控和管理功能,如健康检查、度量、追踪等。
-
spring-boot-starter-logging:用于日志记录的 Starter,包括 Logback、Log4j2 和其他日志框架。适用于配置应用程序的日志输出。
-
spring-boot-starter-parent:这是一个父项目 Starter,它用于管理 Spring Boot 应用程序的依赖版本,通常作为 Spring Boot 项目的父项目引用。
-
spring-boot-starter-xxx:除上述常见的 Starter 外,还有许多其他官方和社区维护的 Starter,如消息队列(如Kafka、RabbitMQ)、NoSQL 数据库(如Cassandra、Couchbase)等。
手写简单spring-boot-starter示例
在了解自动配置的原理后,就简单地创建一个自定义的spring-boot-starter吧。
文件目录贴一下:
-
创建自动配置类和需要定义的bean。
@Configuration public class MyUserAutoConfiguration {@Beanpublic UserManager userManager(){return new UserManager();} }
public class UserManager {public String sayHello() {return "own-starter:hello.";} }
-
在
src/main/resources/META-INF/
目录下创建一个spring.factories
文件org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.lloyd.user.MyUserAutoConfiguration
-
创建一个spring-web的SpringBoot项目,添加自定义Starter的依赖。
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 自定义starter的坐标 --><dependency><groupId>com.lloyd</groupId><artifactId>springboot_06_own_starter</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
-
创建一个Rest接口进行验证
@RestController public class UserController {@Autowiredprivate UserManager userManager; @GetMapping("/user")public String sayHello(){return userManager.sayHello();} }
浏览器结果:
相关文章:

SpringBoot基础详解
目录 SpringBoot自动配置 基于条件的自动配置 调整自动配置的顺序 纷杂的SpringBoot Starter 手写简单spring-boot-starter示例 SpringBoot自动配置 用一句话说自动配置:EnableAutoConfiguration借助SpringFactoriesLoader将标准了Configuration的JavaConfig类…...

学会Docker之---应用场景和基本操作
实体机、VM和容器 实体机(Physical Machine)是指实际的物理设备,例如我们常见的计算机主机、服务器等。它们是由硬件组成,可以直接运行操作系统和应用程序。 虚拟机(Virtual Machine)是在一台物理机上通过…...
C++_linux下_非阻塞键盘控制_程序暂停和继续
1. 功能 在程序执行过程中,点击键盘p按键(pause), 程序暂停, 点击键盘上的n按键(next),程序继续执行 2. 代码 #include <iostream> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/ioctl.h> char get_keyboar…...
SQL AND, OR and NOT(与,或不是运算符)
SQL AND & OR 运算符 AND&OR运算符用于根据一个以上的条件过滤记录,即用于组合多个条件以缩小SQL语句中的数据。 WHERE子句可以与AND,OR和NOT运算符结合使用。 AND和OR运算符用于根据多个条件筛选记录: 如果由AND分隔的所有条件为TR…...

Python网络编程之Socket(套接字)
文章目录 一、Socket概念二、套接字的发展史及分类三、Socket的使用语法格式(基于TCP协议)1.基于TCP协议的套接字(socket)编程半连接池 2.基于UDP协议的套接字(socket)编程也可以使用服务端只接收客户端消息 黏包现象 一、Socket概念 Socket套接字,一种独立于协议的…...

金山终端安全系统V9.0 SQL注入漏洞复现
0x01 产品简介 金山终端安全系统是一款为企业提供终端防护的安全产品,针对恶意软件、病毒和外部攻击提供防范措施,帮助维护企业数据和网络。 0x02 漏洞概述 金山终端安全系统V9.0 /inter/update_software_info_v2.php页面存在sql注入漏洞,该…...

Radius OTP完成堡垒机登录认证 安当加密
Radius OTP(One-Time Password)是一种用于身份验证的协议,它通过向用户发送一个一次性密码来验证用户的身份。使用Radius OTP可以实现堡垒机登录,以下是一些实现步骤: 1、安装Radius服务器 首先需要安装Radius服务器…...

ROS opencv 人脸识别
人脸识别需要在输入的图像中确定人脸(如果存在)的位置、大小和姿态,往往用于生物特征识别、视频监听、人机交互等应用中。2001年,Viola和Jones提出了基于Haar特征的级联分类器对象检测算法,并在2002年由Lienhart和Mayd…...

文心一言 4.0 ERNIE-Bot 4.0 :ERNIE-Bot 4.0 大模型深度测试体验报告
本心、输入输出、结果 文章目录 文心一言 4.0 ERNIE-Bot 4.0 :ERNIE-Bot 4.0 大模型深度测试体验报告前言相关跳转文心一言 4.0 ERNIE-Bot 4.0 接口简介Bash 请求示例代码Windows 模式使用 Python 请求如果直接使用官方提供的代码文心一言 4.0 ERNIE-Bot 4.0 API 在…...

华为OD机考B卷 | 100分】阿里巴巴找黄金宝箱(JAVA题解——也许是全网最详)
前言 本人是算法小白,甚至也没有做过Leetcode。所以,我相信【同为菜鸡的我更能理解作为菜鸡的你们的痛点】。 题干 1. 题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子&…...

请求转发和重定向区别
两者区别: 1.转发在一次请求中完成,重定向是两次请求 2.转发操作发生在服务器内部,重定向是在浏览器执行操作 3.转发地址栏不变,重定向地址栏变化(两次请求,两个地址) 4.转发可以在一次请求中共…...
JS如何判断对象为空?以及各自的缺点。
JS如何判断对象为空?以及各自的缺点。 Object.keys() 通过 Object.keys() 来获取对象的键进行判断。 function isEmpty(obj) {return Object.keys(obj).length 0; }console.log(isEmpty({})); // true console.log(isEmpty({ a: 1 })); // false缺点:…...

同城代驾开源版小程序开发
同城代驾开源版小程序开发 功能特性描述: 定价模式:本系统支持灵活的计价模式,包括白天和夜晚的起步价、起步里程、每公里价以及超时费用,从而满足不同时段的定价需求。 实时路径计算:通过集成腾讯地图的软件开发工…...
【Python机器学习】零基础掌握ShrunkCovariance协方差估计
有没有想过如何准确地评估股票投资的风险? 在投资领域,了解各种资产(如股票、债券等)之间的相关性和波动性是非常重要的。常用的方法是计算资产收益率的协方差矩阵,但这个矩阵在样本量少或数据质量不高的情况下可能会产生误导。那么,有没有更好的方法来解决这个问题呢?…...

精神科常用评估量表汇总,建议收藏!
根据精神科医生的量表使用情况,笔者整理了10个精神科常用量表,可在线评测直接出结果,可转发使用,可生成二维码使用,可创建项目进行数据管理,有需要的小伙伴赶紧收藏! 抑郁自评量表 抑郁自评量表…...
Python之切片
Python之切片 切片 通过给定的索引区间获得线性结构的一部分数据start、stop、step为整数,可以是正整数、负整数、零start为0时,可以省略stop为末尾时,可以省略step为1时,可以省略切片时,索引超过上界(右边界)&#…...
OpenCV显示中文(python)
OpenCV添加文字的方法putText(…),添加英文是没有问题的,但如果你要添加中文就会出现“???”的乱码,需要特殊处理一下。 下文提供封装好的(代码)方法,供OpenCV添加中文使…...

k8s-18 认证授权
Authentication (认证) 认证方式现共有8种,可以启用一种或多种认证方式,只要有一种认证方式通过,就不再进行其它方式的认证。通常启用X509 Client Certs和Service Accout Tokens两种认证方式 Kubernetes集群有两类用户:由Kubernetes管理的Ser…...

WebAPI+EF连接SQL Server数据库
右击解决方案-添加-新建项目-选择“类库(.NET Framework)”,新建的项目取名叫WebApi1.EF 添加EF: 新建一个ADO实体数据模型 选择DBFirst 数据源选择MySql 填写数据库地址及账号密码 选择实体框架版本 选择在数据库中的表User 到此配置完成&am…...
maven-plugin-shade 详解1
maven-plugin-shade 是 Maven 的一个插件,它的作用是将多个 jar 包合并成一个 jar,同时将其中的依赖关系也合并到该 jar 中。这个插件常用于创建可执行 jar 包和打包 web 应用程序。 下面是 maven-plugin-shade 的一些常用配置: 打包的形式&…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...