javaWeb从入门到进阶(SpringBoot原理及bean对象)
配置优先级SpringBoot中支持三种格式的配置文件application.properties-----application.yml------application.yaml如果三个都配置同一属性端口了到底哪个配置文件生效经过验证application.propertiesapplication.ymlapplication.yaml注息事项: 虽然springboot支持多种格式配置文件但是在项目开发时推荐统一使用一种格式的配置(yml是主流SpringBoot除了支持配置文件属性配置还支持Java系统属性和命令行参数的方式进行属性配置。将这五种配置方式比较优先级最高的是命令行参数其次是java系统属性之后依次排列。命令行参数java系统属性application.propertiesapplication.ymlapplication.yamlBean对象Bean Spring管理的对象创建方式Component,Service,Bean等核心特性依赖注入、生命周期管理默认作用域单例一个容器一个实例关键价值解耦、可测试、可维护常见问题QBean和普通对象有什么区别A普通对象自己new自己管理Bean由Spring容器管理支持依赖注入、AOP、事务等。QComponent和Bean有什么区别AComponent用在类上Spring自动扫描创建Bean用在方法上手动定义创建逻辑通常用于第三方库的类QBean默认是单例线程安全吗A不如果Bean有状态成员变量需要考虑线程安全。无状态Bean是线程安全的。Q如何解决Bean的循环依赖A使用构造器注入时Spring无法解决循环依赖使用Setter/字段注入可以解决最好重新设计避免循环依赖简单说Bean让你从对象装配工变成业务架构师。你写的是业务逻辑做什么Spring做的是对象管理、依赖注入、配置、事务、安全、监控等怎么做就像你开车时你只管要去哪里、走哪条路业务逻辑汽车负责发动机、变速箱、刹车系统Bean管理这就是IOC控制反转的核心思想传统你控制对象的创建和依赖Spring容器控制对象的创建和依赖你只需要使用所以虽然业务逻辑是你写的但所有基础设施的工作都交给Spring了让你能更专注于业务本身实例理解底层原理Bean封装的是特定领域的完整能力——不仅仅是数据而是数据 行为 状态 配置 依赖的完整组合。就像一辆汽车数据油箱里的油状态行为加速、刹车、转向方法配置发动机型号、轮胎尺寸配置依赖需要汽油、电力依赖封装你只需要踩油门不用管发动机怎么工作就像电影制作导演你设计剧情、指导演员写业务逻辑制片公司Spring提供场地、设备、资金、发行提供运行环境观众调用者看电影调用业务方法导演设计了剧情你写了业务方法但电影的拍摄和放映是由制片公司系统化完成的所以业务逻辑是你写的但调用这个逻辑的系统是Spring提供的。这就是框架的意义所在所以Bean 高内聚的功能单元它把相关的数据和行为打包在一起对外提供清晰的服务接口内部隐藏实现细节。这就是面向对象和IoC容器的完美结合获取bean默认情况下Spring项目启动时会把bean都创建好放在IOC容器中如果想要主动获取这些bean可以通过如下方式:根据name获取bean:Object getBean (String name)根据类型获取bean:(T T getBean (ClassT requiredType)根据name获取bean(带类型转换):T T getBean (String name, ClassT requiredType)注意事项上述所说的[Spring项目启动时会把其中的bean都创建好】还会受到作用域及延迟初始化影响这里主要针对于默认的单例非延迟加载的bean而言。bean作用域Spring支持五种作用域后三种在web环境才生效:第三方beanBean如果要管理的bean对象来自于第三方(不是自定义的)是无法用Component 及衍生注解声明bean的就需要用到Bean注解这是配置在启动类中的一般不建议因为我们要保证启动类的纯粹性这是我们可以创建一个类加上Configuration配置类。注意事项通过Bean注解的name或value属性可以声明bean的名称如果不指定默认bean的名称就是方法名。如果第三方bean需要依赖其它bean对象直接在bean定义方法中设置形参即可容器会根据类型自动装配。项目中自定义的使用Component及其衍生注解项目中引入第三方的使用Bean注解。SpringBoot原理起步依赖原理maven的依赖传递。自动配置原理SpringBoot的自动配置就是当spring容器启动后一些配置类、bean对象就自动存入到了IOC容器中不需要我们手动去声明从而简化了开发省去了繁琐的配置操作。SpringBoot只能扫描启动类所在包及其子包当我们引入第三方bean时并不在启动类所在包或子包。这时我们方案一:ComponentScan组件扫描需要注意的添加了这个注解会覆盖原来的包我们也需要加上原来的包。使用繁琐性能低。方案二:lmport导入。使用lmport导入的类会被Spring加载到IOC容器中导入形式主要有以下几种:导入普通类导入 配置类导入ImportSelector接口实现类EnableXxxx注解封装Import注解SpringBootApplication该注解标识在SpringBoot工程引导类上是SpringBoot中最最最重要的注解。该注解由三个部分组成:SpringBootConfiguration:该注解与Configuration注解作用相同用来声明当前也是一个配置类。ComponentScan:组件扫描默认扫描当前引导类所在包及其子包。EnableAutoConfiguration:SpringBoot实现自动化配置的核心注解。Conditional作用:按照一定的条件进行判断在满足给定条件后才会注册对应的bean对象到SpringIOC容器中。位置:方法、类Conditional本身是一个父注解派生出大量的子注解:ConditionalOnClass:判断环境中是否有对应字节码文件才注册bean到IOC容器。ConditionalOnMissingBean:判断环境中没有对应的bean(类型 或名称)才注册bean到IOC容器ConditionalOnProperty:判断配置文件中有对应属性和值才注册bean到IOC容器。字节码文件JdbcTemplate.class↓先决条件有JdbcTemplate类说明项目想用JDBC↓Bean对象dataSource() 和 jdbcTemplate()↓关系字节码文件是创建Bean的前提条件核心逻辑所以字节码文件和要添加的Bean对象有关系但不一定是1:1的对应关系而是功能模块的对应关系有某个字节码文件 → 说明用户想要某个功能Spring Boot → 自动配置这个功能需要的所有Bean创建的Bean可能包括字节码文件对应的类 相关辅助类你点鱼字节码文件厨师不仅给你鱼还给配菜、调料、餐具一系列Bean鱼是核心但配菜也是必要的

相关新闻

Flink 弹性伸缩(Elastic Scaling)Adaptive Scheduler、Reactive Mode 与外部资源声明

Flink 弹性伸缩(Elastic Scaling)Adaptive Scheduler、Reactive Mode 与外部资源声明

1. 弹性伸缩到底解决什么问题? 核心问题不是“能不能调并发”,而是“资源经常不稳定”: 提交时集群 slot 不够:以前要么卡住、要么失败、要么你手动降并发重提运行中 TaskManager 掉线:默认调度器可能触发失败/重启策略…

2026/5/17 1:31:18 阅读更多 →
Java性能优化你真的玩明白了吗?

Java性能优化你真的玩明白了吗?

作为一个程序员,性能优化是常有的事情,不管你是刚入行的小白还是已经入坑了很久的小秃头都会经历很多不同层次的性能优化——小到代码审查大到整个系统设计的优化!大势所趋之下,如何让自己的优化方向精准到性能瓶颈的那个点以及尽…

2026/5/17 1:31:17 阅读更多 →
0x3f 第48天 面向实习的八股背诵第五天 + 堆一题 背了JUC的题,java.util.Concurrency

0x3f 第48天 面向实习的八股背诵第五天 + 堆一题 背了JUC的题,java.util.Concurrency

1.跳跃游戏只需要一个mx标记能跳到的最大地方,不断更新就行,如果到最后i>mx,那就说明到了最后一个节点,mx跳不到i这个位置,那就是False2.跳跃游戏Ⅱ关键两个参数一个是当前能走到的最远距离一个是下一次能走到的最远…

2026/5/17 1:31:17 阅读更多 →

最新新闻

嵌套 H5 的跨端通信:iOS / Android / 小程序 / 浏览器

嵌套 H5 的跨端通信:iOS / Android / 小程序 / 浏览器

一、为什么要做“统一桥接层”? “Write once, run anywhere” 对于纯展示型 H5 是成立的。但只要涉及到业务交互,比如:调起原生登录、保存图片到相册、修改系统状态栏颜色、分享到朋友圈,浏览器标准的 Web API 根本无能为力。 …

2026/7/3 2:40:31 阅读更多 →
交叉熵损失函数实战指南:原理、陷阱与工业级调优

交叉熵损失函数实战指南:原理、陷阱与工业级调优

1. 项目概述:为什么交叉熵损失函数不是“又一个公式”,而是模型精度的隐形操盘手在机器学习项目里,你调用model.compile(losscategorical_crossentropy)可能只需要0.3秒,但背后这个看似简单的函数,却直接决定了模型是“…

2026/7/3 2:38:31 阅读更多 →
ThreadLocalMap 设计及工作原理

ThreadLocalMap 设计及工作原理

把焦点深入到 ThreadLocalMap 这个核心容器上。它是理解整个 ThreadLocal 机制的关键,也是一个精巧的、为特定场景优化的定制化哈希表。下面我从数据结构、哈希冲突解决、扩容机制和关键操作四个维度,剖析它的设计精髓。1. 数据结构:弱引用的…

2026/7/3 2:36:30 阅读更多 →
Node.js Promise.all 并行查询实战:性能提升与错误处理详解

Node.js Promise.all 并行查询实战:性能提升与错误处理详解

在 Node.js 后端开发中,我们经常需要从多个数据源(如数据库、外部 API、文件系统)并行获取数据。如果采用传统的串行 await 方式,总耗时将是所有异步操作耗时的总和,这在处理高并发或延迟敏感的业务时是无法接受的。…

2026/7/3 2:36:30 阅读更多 →
SpringBoot+MySQL实战:从零搭建企业级后台管理系统

SpringBoot+MySQL实战:从零搭建企业级后台管理系统

1. 先搞清楚这个“新冠物资管理系统”到底能做什么,以及它适合谁看到“新冠物资管理系统”这个标题,很多人第一反应可能是:这会不会是一个过时的、特定时期的项目?实际上,这个基于 SpringBoot 和 MySQL 的项目&#xf…

2026/7/3 2:34:30 阅读更多 →
别再熬夜写论文了!6款AI论文写作工具,一键极速生成超长篇幅!

别再熬夜写论文了!6款AI论文写作工具,一键极速生成超长篇幅!

别再做“学术裁缝”触碰学术不端风险了!本文解析论文写作新范式,介绍AI辅助原创、人机协同深化、全流程合规保障三大核心,并推荐6款免费AI论文工具,覆盖全流程生成、深度对话构思、理工科适配、范文参考、文献检索、学术润色翻译等…

2026/7/3 2:32:30 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻