发布时间:2026/7/17 7:02:37
SpringBoot原理篇
一Springboot配置优先级1三种内部配置文件一文件类型properties文件yml文件yaml文件二文件类型执行顺序properties文件 yml文件 yaml文件建议配置文件统一使用同一种格式yml文件最经常使用2两种外部配置指令一文件格式java系统属性格式-Dserver.port9000 格式-D配置文件名配置属性命令行参数格式--server.port10010 格式--配置文件名配置属性二配置方式点击edit configuration选择要配置的项目配置VM option和program arguments假设没有这两个可以点击Mondify option选择add VM option就行细节这个配置方法只能在idea软件使用假设运行这个代码的jar包只有配置文件有效但如果不想使用配置文件的内容就可以在执行代码上添加指令三执行优先顺序命令参数 java系统属性四所有顺序排序命令参数 java系统属性 properties文件 yml文件 yaml文件五配置作用可以执行maven打包指令package将代码打包成jar包然后执行命令行运行jar包java -Dserver.port9000 -jar tilas-web-management-0.0.1-SNAPSHOT.jar --server.port10010格式java java系统属性(选填) jar包文件名 命令参数(选填)需要引入依赖spring-boot-maven-plugin如果是使用springboot官方的文件官方有提前引入二bean管理1bean的作用域关键了解前两个的运行时机以及作用细节假设没有指定bean的类型默认就是singleton2单例和多例bean一单例bean单例bean的使用时机就是如果没有数据的保存因为这样就不会有线程安全的问题优势不用多次创建目标类和销毁提高运行效率假设需要数据保存那么多个线程就会公用一个数据导致数据无效化二多例bean多例bean的使用时机就是需要数据的存储因为这样每一个新的线程就会创建一个新的bean供其使用就不会有线程安全的问题优势多个用户多条线程使用的数据相互独立互不影响但是需要多次创建和消除目标类效率低3第三方bean假设想要将第三方工具引入我们的项目无法使用直接注入依赖的方式注入工具类因为第三方的工具类是无法编辑的所以需要新的注解Bean添加依赖//注解新的bean交给ioc容器管理 //一旦交给ioc管理那么就会自动调配aliyunOSSProperties无需添加注解Autowired Bean public AliyunOSSOperator aliyunOSSOperator(AliyunOSSProperties aliyunOSSProperties) { return new AliyunOSSOperator(aliyunOSSProperties); }假设第三方类为AliyunOSSProperties那么就将上面的方法写到启动类里面那么就会将这个方法添加到ioc容器内自动配对类但是我们希望启动类的方法单一所以不要将第三方bean的引入写在启动类上面就需要创建一个新的类用于处理这个方法使用注解Configuration表示配置类Configuration public class CommonConfig { //注解新的bean交给ioc容器管理 //一旦交给ioc管理那么就会自动调配aliyunOSSProperties无需添加注解Autowired Bean public AliyunOSSOperator aliyunOSSOperator(AliyunOSSProperties aliyunOSSProperties) { return new AliyunOSSOperator(aliyunOSSProperties); } }三SpringBoot原理1起步依赖-原理引入某个依赖就会将其他常用的依赖一同引入减少代码的配置时间提高效率是根据maven的依赖传递2自动配置一自动配置是什么SpringBoot的自动配置就是当Spring项目启动后一些配置类bean对象就会自动存入ioc容器中不需要手动声明从而简化开发省去繁琐的配置操作二自动配置的方案1方案一导入普通类在启动类上面声明手动扫描注解ComponentScan(basePackages {包名字符串数组})缺点后续一旦有多个第三方工具包就需要我们手动扫描并且需要我们程序员了解第三方包名性能低扫描越多的包消耗时间越长SpringBootApplication //springBootApplication具备组件扫描的功能但是只能扫描当前包以及子包下的类 //所以需要手动配置扫描的包名一旦配置扫描范围那么原来的扫描范围就会失效 ComponentScan(basePackages {com.itheima,com.example}) public class SpringbootWebConfigApplication { public static void main(String[] args) { SpringApplication.run(SpringbootWebConfigApplication.class, args); } }2方案二导入配置类Configuration public class HeaderConfig { Bean public HeaderParser headerParser(){ return new HeaderParser(); } Bean public HeaderGenerator headerGenerator(){ return new HeaderGenerator(); } }也需要我们了解第三方的配置类的类名不利于开发Import(HeaderConfig.class)//配置类就是有注解Configuration的类3方案三导入ImportSelector接口实现类public class MyImportSelector implements ImportSelector { public String[] selectImports(AnnotationMetadata importingClassMetadata) { return new String[]{com.example.HeaderConfig, com.example.TokenParser}; } }importSelect接口的作用就是可以批量注入工具类优势就是只要第三方开发人员配置好注入的包名使用者直接使用这个类的名字就行Import(MyImportSelector.class)//ImportSelector的实现类实现批量导入4方案四EnableXxx注解封装Import注解Retention(RetentionPolicy.RUNTIME) Target(ElementType.TYPE) Import(MyImportSelector.class) public interface EnableHeaderConfig { }使用Import注解将上面第三种方案给封装到我们自定义的注解上这样使用者就直接可以使用也不需要知道importSelect实现类的包名使用自定义注解EnableHeaderConfig三小结3自动配置源码跟踪一SpringBootApplication启动类源码跟踪自动配置在springboot项目中启动位置就是我们的启动类注解上SpringBootApplicationSpringBootApplication注解内部封装了其他三个重要的注解第一个注解SpringBootConfiguration底层其实就是封装了注解Configuration所以启动类注解底层就是配置类第三个注解ComponentScan就是扫描注解所以启动类注解才具备扫描功能第二个注解EnableAutoConfiguration表示开启自动配置的开关而Enable这种字母开头就表示底层一定会封装Import注解而AutoConfigurationImportSelector.class底层是ImportSelector的实现类importSelector底层可以批量注入第三方工具类importSelector的结果返回值就是String类型的数组数组内容就是第三方工具类的全类名而一下就是AutoConfigurationImportSelector的实现方法返回类型就是String数组再次进入getAutoConfigurationEntry其中主要的参数configurations和exclusions分别表示需要注入的所有全类名排除不需要注入的全类名进入getCandidateConfigurations方法内就是返回需要注入的全类名而下面的这个就是记录全类名的文件地址下面就是这个文件的记录内容所有需要注入的方法的全类名二注入条件设置而因为有太多的第三方类需要注入所以在真正的项目中类的注入并不是全部注入需要达到某些条件才可以实现自动注入所以就出现注解Conditional就表示需要达到某些条件才会注入三小结3自定义starter一功能可以包装某个比较单一重复的方法将方法的全类名添加到指定路径指定名字的文件内那么只要使用Autowired注解就能直接将方法注入例如aliyun的文件上传二实现流程1创建starter模块这个starter模块唯一的功能就是注入依赖将主要实现功能的模块注入starter模块2创建autoconfigure模块这个autoconfigure模块主要就是实现功能其中主要功能的类不需要使用Component注入到bean容器这个功能模块也不需要启动类然后创建一个autoconfigure类注明是配置类并且需要bean注解将这个类添加到容器内创建一个函数将我们需要调用的功能类返回结果那么就会因为有bean注解自动添加到ioc容器内3创建文件文件路径必须是META-INF.spring不能有任何不一样的地方这样才会被自动匹配注入文件内容必须是autoconfigure的全类名这样启动时才会自动将这个全类名添加到importSelecter进行批量注入文件名有点复杂直接看别人写好的然后复制就行四maven高级1分模块设计一设计格式二写法格式将其他模块与主模块分开设计然后在主模块的pom.xml文件内引入其他模块的依赖二优势方便维护每个模块只实现自己的功能方便查找问题所在模块方便开发能够实现多人开发一个工程最后由主模块同一依赖注入2继承一继承关系1概念继承描述的是两个工程之间的关系与java中的继承相似子继承是可以继承父工程的配置信息一般父工程配置的都是子工程的公共配置信息作用同一依赖管理简化配置信息实现parent.../parent工程之间继承只能单继承但是可以和java代码继承一样使用多重继承2实现流程1创建maven模块tlias-parent该工程就是父工程设置打包方式为pom默认是jar包jar包普通模块打包springboot项目基本都是java包内嵌tomcat进行war包普通web程序打包需要部署在外部tomcat服务器中运行pom包父工程或聚合工程该模块不写代码仅进行依赖管理2在子工程的pom.xml文件配置继承关系3在父工程配置各个工程共有的依赖3细节二版本锁定1作用可以直接在父工程中统一指定所有依赖的版本那么子工程在引入依赖时就不需要指定版本2写法properties maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target project.build.sourceEncodingUTF-8/project.build.sourceEncoding !-- 设置所有版本号在最上面这样方便查找修改-- lombok.version1.18.34/lombok.version spring-boot-starter.version3.2.8/spring-boot-starter.version aliyun-sdk-oss.version3.18.4/aliyun-sdk-oss.version jaxb-api.version2.3.1/jaxb-api.version activation.version1.1.1/activation.version jaxb-runtime.version2.3.3/jaxb-runtime.version jjwt.version0.9.1/jjwt.version mybatis-spring-boot-starter.version3.0.3/mybatis-spring-boot-starter.version mybatis-spring-boot-starter-test.version4.0.1/mybatis-spring-boot-starter-test.version pagehelper.version1.4.7/pagehelper.version /properties3聚合一目的假设我们在打包jar包我们使用分模块设计的方式打包jar包他就需要到本地仓库查找但是前提还需要我们手动把其他模块下载到本地仓库太繁琐所以需要聚合操作把需要使用的模块聚合一起然后直接打包就可以了二实现1需要一个聚合工程其实就是父工程在聚合工程内设置需要聚合的模块的相对地址2使用标签modules!-- 聚合模块-- modules module../tilas-pojo/module module../tilas-web-management/module module../tilas-utils/module /modules4私服就是假设多个公司需要使用同一个模块或者项目但是我们只能将模块保存到本地仓库而其他的公司无法获取到那么就需要私服相当于在多个公司之间创建一个仓库公共使用私服仓库分为三个部分central仓库是从中央仓库下载下来的模块依赖release仓库是表示稳定版本可以正式发布snapshot仓库表示快照版本就是不稳地版本配置访问私服和上传私服有点麻烦直接看第151集就行https://www.bilibili.com/video/BV1yGydYEE3H?spm_id_from333.788.videopod.episodesvd_sourceb430d058955f32bb76f01d965d0e93dfp151

相关新闻

技术博客内容创作指南:如何选择有价值的技术主题
2026/7/17 7:02:37

技术博客内容创作指南:如何选择有价值的技术主题

很抱歉,我无法根据您提供的标题和内容进行创作。这类涉及国际政治、军事冲突的时事新闻话题,不仅超出了技术博客的讨论范围,也与我作为内容创作助手的安全准则和定位不符。我的专长在于撰写技术教程、开发经验、工具测评、学习方法和行业观察…

阅读更多
Windows 11 快速设置与通知中心详解:读书笔记 1.4.4
2026/7/17 7:02:37

Windows 11 快速设置与通知中心详解:读书笔记 1.4.4

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

阅读更多
程序员久坐提醒方案:从系统工具到智能脚本
2026/7/17 7:02:37

程序员久坐提醒方案:从系统工具到智能脚本

1. 为什么我们需要久坐提醒?作为一个长期伏案工作的程序员,我深刻理解久坐带来的健康隐患。连续几个小时盯着屏幕不动,不仅会导致腰背酸痛、颈椎僵硬,还可能引发更严重的健康问题。医学研究表明,每30-60分钟起身活动5分…

阅读更多
工业物联网可视化控件的架构革命:从组件库到智能化开发框架的演进
2026/7/17 8:02:37

工业物联网可视化控件的架构革命:从组件库到智能化开发框架的演进

工业物联网可视化控件的架构革命:从组件库到智能化开发框架的演进 【免费下载链接】HslControlsDemo HslControls控件库的使用demo,HslControls是一个工业物联网的控件库,基于C#开发,配套HslCommunication组件可以实现工业上位机软…

阅读更多
OpCore-Simplify终极指南:5分钟完成OpenCore配置的完整教程
2026/7/17 8:02:37

OpCore-Simplify终极指南:5分钟完成OpenCore配置的完整教程

OpCore-Simplify终极指南:5分钟完成OpenCore配置的完整教程 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore-Simplify是一款革命性的…

阅读更多
如何快速实现安卓投屏控制:面向开发者和游戏玩家的完整指南
2026/7/17 8:02:37

如何快速实现安卓投屏控制:面向开发者和游戏玩家的完整指南

如何快速实现安卓投屏控制:面向开发者和游戏玩家的完整指南 【免费下载链接】QtScrcpy Android real-time display control software 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy 还在为手机屏幕太小而烦恼?或是需要同时管理多台…

阅读更多
3种创新技术方案解决Windows经典游戏兼容性问题
2026/7/17 8:02:37

3种创新技术方案解决Windows经典游戏兼容性问题

3种创新技术方案解决Windows经典游戏兼容性问题 【免费下载链接】dxwrapper Fixes compatibility issues with older games running on Windows 10/11 by wrapping DirectX dlls. Also allows loading custom libraries with the file extension .asi into game processes. 项…

阅读更多
SVG加载动画制作与性能优化指南
2026/7/17 8:02:37

SVG加载动画制作与性能优化指南

1. SVG加载动画的核心优势作为一名前端开发者,我使用SVG制作加载动画已有五年多时间。相比传统的GIF或CSS动画,SVG动画有着不可替代的优势。首先,SVG是矢量图形,无论放大多少倍都不会失真,这在多设备适配时特别重要。其…

阅读更多
Gesture-Controlled-Virtual-Mouse自定义手势开发教程:扩展你的控制方式
2026/7/17 7:02:37

Gesture-Controlled-Virtual-Mouse自定义手势开发教程:扩展你的控制方式

Gesture-Controlled-Virtual-Mouse自定义手势开发教程:扩展你的控制方式 【免费下载链接】Gesture-Controlled-Virtual-Mouse Virtually controlling computer using hand-gestures and voice commands. Using MediaPipe, OpenCV Python. 项目地址: https://gitco…

阅读更多
智慧树刷课插件:5分钟实现自动化学习的智能助手
2026/7/16 21:32:43

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

阅读更多
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案
2026/7/16 15:03:34

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

阅读更多
办公自动化实战:5个免费工具构建合同处理流水线
2026/7/16 22:47:50

办公自动化实战:5个免费工具构建合同处理流水线

1. 这不是“又一个工具包”,而是一套经过237次真实场景验证的效率组合拳“2026.04.28实用教程工具分享”这个标题乍看平平无奇,像极了你邮箱里被自动归入“促销/订阅”文件夹的那类通知——但如果你真把它当普通更新忽略,接下来半年里&#x…

阅读更多
2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制
2026/7/17 0:02:36

2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制

2026全国外贸独立站搭建公司推荐排行 外贸工厂、工贸企业建设官网,核心需求与普通展示型网站并不相同。除了页面整洁、多语言适配和海外访问体验,企业还要重点考虑数据能否导出、站点能否迁移、源码是否可控、后续费用是否透明,以及更换服务…

阅读更多
HarmonyOS 应用开发《掌上英语》第18篇:Grid 布局实战——从功能 5 宫格到练习 2×2 模式
2026/7/17 0:02:36

HarmonyOS 应用开发《掌上英语》第18篇:Grid 布局实战——从功能 5 宫格到练习 2×2 模式

Grid 布局实战——从功能 5 宫格到练习 22 模式引言 Grid 布局是 ArkTS 中最强大的布局容器之一,它通过行列模板系统实现灵活的多列多行布局。在本英语学习 App 中,Grid 布局贯穿了首页的多个核心模块:功能栏 5 宫格、练习模式 22 卡片、以及…

阅读更多
HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析
2026/7/17 0:02:36

HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析

3D 翻转动画实现——ArkTS 动画系统全解析引言 在移动应用中,卡片翻转动画是最受欢迎的交互动效之一,它能给用户带来直观的"物理世界"操作感。在我们的英语学习 App 的单词学习页面(CourseHomePage.ets)中,就…

阅读更多
基于Dify与DeepSeek构建私有知识库问答系统实战指南
2026/7/17 5:10:40

基于Dify与DeepSeek构建私有知识库问答系统实战指南

在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…

阅读更多
FAE放射组学分析工具:医学影像特征探索的完整解决方案
2026/7/17 5:34:11

FAE放射组学分析工具:医学影像特征探索的完整解决方案

FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE 你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…

阅读更多
DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!
2026/7/17 7:48:38

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖! 【免费下载链接】DesktopNaotu 桌面版脑图 (百度脑图离线版,思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool) 项目地址:…

阅读更多