news 2026/4/15 15:54:58

javaWeb从入门到进阶(SpringBoot原理及bean对象)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
javaWeb从入门到进阶(SpringBoot原理及bean对象)

配置优先级:

SpringBoot中支持三种格式的配置文件:

application.properties-----application.yml------application.yaml

如果三个都配置同一属性端口了,到底哪个配置文件生效?

经过验证:application.properties>application.yml>application.yaml

注息事项: 虽然springboot支持多种格式配置文件,但是在项目开发时,推荐统一使用一种格式的配置(yml是主流

SpringBoot除了支持配置文件属性配置,还支持Java系统属性和命令行参数的方式进行属性配置。

将这五种配置方式比较,优先级最高的是命令行参数,其次是java系统属性,之后依次排列。

命令行参数>java系统属性>application.properties>application.yml>application.yaml

Bean对象:

  • Bean= Spring管理的对象

  • 创建方式@Component,@Service,@Bean

  • 核心特性:依赖注入、生命周期管理

  • 默认作用域:单例(一个容器一个实例)

  • 关键价值:解耦、可测试、可维护

常见问题:

Q:Bean和普通对象有什么区别?
A:普通对象自己new,自己管理;Bean由Spring容器管理,支持依赖注入、AOP、事务等。

Q:@Component和@Bean有什么区别?
A:

  • @Component:用在类上,Spring自动扫描创建

  • @Bean:用在方法上,手动定义创建逻辑,通常用于第三方库的类

Q:Bean默认是单例,线程安全吗?
A:不!如果Bean有状态(成员变量),需要考虑线程安全。无状态Bean是线程安全的。

Q:如何解决Bean的循环依赖?
A:

  1. 使用构造器注入时,Spring无法解决循环依赖

  2. 使用Setter/字段注入可以解决

  3. 最好重新设计,避免循环依赖

简单说: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 (Class<T> requiredType)
根据name获取bean(带类型转换):<T> T getBean (String name, Class<T> requiredType)

注意事项
上述所说的[Spring项目启动时,会把其中的bean都创建好】还会受到作用域及延迟初始化影响,这里主要针对于默认的单例非延迟加载的bean而言。

bean作用域


Spring支持五种作用域,后三种在web环境才生效:

第三方bean


@Bean
如果要管理的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)

  • 鱼是核心,但配菜也是必要的

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 4:46:27

不得了!天玑AIGEO优化系统口碑排行背后的营销奥秘

行业痛点分析在当前天玑AIGEO优化系统领域&#xff0c;存在着诸多技术挑战。对于拥有线下门店或区域化业务的企业而言&#xff0c;精准营销落地困难是一大难题。传统广告投放缺乏数据支撑&#xff0c;难以精准匹配目标客群&#xff0c;导致曝光量分散、转化率低迷&#xff0c;大…

作者头像 李华
网站建设 2026/4/8 23:37:17

Claude Code 完整学习计划

&#x1f44b; 欢迎&#xff01; 你好&#xff01;欢迎来到 Claude Code 学习之旅。这份学习计划专门为初学者设计&#xff0c;用最简单、最直白的方式帮你掌握这个强大的 AI 编程助手。 不用担心&#xff0c;我们会一步一步来&#xff0c;保证你能看懂、学会&#xff01; &a…

作者头像 李华
网站建设 2026/4/15 15:02:48

AI 时代,我们是在进化还是在“脑力外包”?

当代码只剩“一句话”:AI 正在批量杀死程序员,还是在帮我们“脱壳”? 最近技术圈最焦虑的话题,莫过于 AI 程序员。 从 Cursor 的爆火到各种“一句话生成 App”的短视频刷屏,不少同行都在调侃:“以后不用写代码了,直接写小作文吧。”但玩笑归玩笑,深夜关掉编辑器,我们…

作者头像 李华
网站建设 2026/4/12 16:18:22

Spring Boot 2 + Flyway 最佳实践:多数据库配置与迁移规范

Spring Boot 2 Flyway 最佳实践&#xff1a;多数据库配置与规范化迁移适用技术栈&#xff1a;Spring Boot 2.x Flyway本文面向生产场景&#xff0c;提供一套可落地的 Flyway 最佳实践&#xff0c;涵盖多数据库配置方案、迁移脚本规范、环境隔离、回滚策略、团队协作与常见问题…

作者头像 李华
网站建设 2026/4/9 16:23:35

基于图像识别的智能垃圾分类系统设计与实现_jew30c27_xk054

一、项目技术介绍 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/…

作者头像 李华