【SpringBoot】11 概念理解 - 深入理解 Java 和 Spring 中的容器、组件、类、对象与 Bean

文章目录

    • 引言
    • 1. 基本概念解析
      • 1.1 类(Class)
      • 1.2 对象(Object)
      • 1.3 组件(Component)
      • 1.4 Bean 实例(Bean Instance)
      • 1.5 容器(Container)
    • 2. 运行时 vs. 非运行时的区别
    • 3. 关键关联与流程
      • 3.1 类 → 对象
      • 3.2 组件(@Component)→ Bean 实例
      • 3.3 容器(ApplicationContext)管理所有 Bean
      • 3.4 Bean 的生命周期
    • 4. 常见问题解答
      • 4.1 @Component 和 new 创建的对象有什么区别?
      • 4.2 Bean 的作用域(Scope)有哪些?
      • 4.3 如何手动获取 Bean?
    • 5. 总结


引言

在 Java 和 Spring 开发中,我们经常听到容器(Container)、组件(Component)、类(Class)、对象(Object)、Bean 实例(Bean Instance)这些术语。它们看似相似,但在不同阶段(代码编写时 vs. 运行时)有着不同的含义和作用。本文将系统性地介绍这些概念,并解释它们在 Spring 框架中的运行机制,帮助开发者更好地理解 Spring 的核心原理。

1. 基本概念解析

1.1 类(Class)

定义:类是 Java 的代码模板,用于描述对象的属性和方法(如 Car.java)。
非运行时:仅存在于 .java 源代码或编译后的 .class 字节码文件中。
运行时:被 JVM 加载到内存,成为可实例化的模板。

示例:

public class Car {private String brand;public void drive() {System.out.println("Driving " + brand);}
}

1.2 对象(Object)

定义:类的实例(如 new Car())。
非运行时:不存在(对象是运行时的概念)。
运行时:在堆内存中分配空间,存储数据。

示例:

Car myCar = new Car(); // 创建一个 Car 对象
myCar.drive();         // 调用对象方法

1.3 组件(Component)

定义:在 Spring 中,被 @Component(或其派生注解,如 @Service、@Controller)标记的类,表示它是一个可被 Spring 管理的对象。
非运行时:只是一个普通类,Spring 不会管理它。
运行时:Spring 会扫描并创建它的 Bean 实例。

示例:

@Component
public class UserService {public void login() {System.out.println("User logged in");}
}

1.4 Bean 实例(Bean Instance)

定义:由 Spring 容器管理的对象(即 Spring 创建的组件实例)。
非运行时:不存在(Bean 是运行时概念)。
运行时:Spring 通过 IoC 容器创建并管理它的生命周期(如依赖注入、AOP 代理等)。

示例:

@Autowired
private UserService userService; // Spring 自动注入 UserService 的 Bean

1.5 容器(Container)

定义:Spring 的 IoC(控制反转)容器,负责管理所有 Bean。
非运行时:不存在(容器是运行时的概念)。
运行时:
ApplicationContext:Spring 的核心容器,存储所有 Bean。
BeanFactory:更底层的容器接口。

示例:

ApplicationContext context = SpringApplication.run(App.class, args);
UserService userService = context.getBean(UserService.class); // 从容器获取 Bean

2. 运行时 vs. 非运行时的区别

概念非运行时(代码阶段)运行时(JVM + Spring 运行)
类(Class)存在于 .java/.class 文件被 JVM 加载到内存
对象(Object)不存在在堆内存中分配
组件(@Component)只是一个普通类Spring 扫描并创建 Bean
Bean 实例不存在由 Spring 容器管理
容器不存在ApplicationContext 管理所有 Bean

3. 关键关联与流程

3.1 类 → 对象

类定义结构,运行时通过 new 关键字创建对象。
示例:

Car car = new Car(); // 创建一个对象

3.2 组件(@Component)→ Bean 实例

Spring 扫描 @Component 类,并在容器中创建其 Bean 实例。
示例:

@Component
public class OrderService { ... }// 运行时,Spring 自动创建 OrderService 的 Bean

3.3 容器(ApplicationContext)管理所有 Bean

容器存储所有 Bean,并提供依赖注入(DI)等功能。
示例:

@Autowired
private OrderService orderService; // Spring 自动注入 Bean

3.4 Bean 的生命周期

  1. 创建:Spring 启动时,容器初始化所有单例 Bean。
  2. 依赖注入:@Autowired 自动注入依赖。
  3. 销毁:容器关闭时,调用 @PreDestroy 方法。

4. 常见问题解答

4.1 @Component 和 new 创建的对象有什么区别?

@Component 的类由 Spring 管理(依赖注入、AOP 等)。
new 创建的对象不受 Spring 管理,无法自动注入依赖。

4.2 Bean 的作用域(Scope)有哪些?

singleton(默认):整个应用一个实例。
prototype:每次请求都创建新实例。
request/session:Web 环境下有效。

4.3 如何手动获取 Bean?

ApplicationContext context = ...;
Car car = context.getBean(Car.class);

5. 总结

概念作用运行时表现
定义对象结构被 JVM 加载
对象类的实例堆内存分配
组件标记 Spring 管理的类Spring 创建 Bean
BeanSpring 管理的对象存储在容器中
容器管理所有 BeanApplicationContext 控制流程

理解这些概念及其运行时行为,能帮助开发者更好地掌握 Spring 的运行机制和依赖注入原理,从而编写更高效、可维护的代码。

希望本文对你有所帮助!如果有任何疑问,欢迎留言讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/918859.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【学习嵌入式day-25-线程】

exec函数族exec函数族利用进程空间执行另一份代码#include "../head.h"int main(void) {char *parg[5] {"./hello","how","are","you",NULL,};printf("execl-up\n");//execl("./hello", "./hello…

Rust 中 Box 的深度解析:作用、原理与最佳实践

Rust 中 Box 的深度解析:作用、原理与最佳实践 Box 是 Rust 中最基础且最重要的智能指针类型,它在 Rust 的内存管理和所有权系统中扮演着核心角色。以下是关于 Box 的全面解析: Box 的核心作用 #mermaid-svg-m6liFZlmqOHRfIZB {font-family:&…

【测试用例】

需求背景部分金融/政企等行业客户,企业内部安全要求较高,且因为某些原因未接入 sso 登录,会要求 MG 提供较为复杂的密码规则甚至提供强更机制;且每个客户的安全要求不一样目前 MG 线上密码规则: 8 位以上,包…

Klipper-probe模块

配置信息[probe] pin: !PD4 x_offset: 0 y_offset: 0 z_offset: -0.20 #the distance between nozzle and level switch speed: 10 samples: 2 #probe one point three times get an average samples_result: average sample_retract_dist: 5 samples_tolerance: 0.05 # …

Excel多级数据结构导入导出工具

Excel多级数据结构导入导出工具 这是一个功能强大的Excel导入导出工具库,专门用于处理复杂的多级嵌套数据结构。通过自定义注解配置,可以轻松实现Java对象与Excel文件之间的双向转换。 核心功能特性 1. 多级数据结构支持 嵌套对象处理: 支持任意层级的对…

基于UniApp的新大陆物联网平台温湿度检测系统开发方案

新大陆物联网平台对接要点 认证方式: 使用AccessToken进行API认证 Token存储在本地缓存中 数据格式: 温度数据单位:摄氏度(C) 湿度数据单位:百分比(%) 时间格式:ISO 8601或时间戳 设备状态: online:…

Git、JSON、MQTT

GIT简介:Git是什么?Git是目前世界上最先进的分布式版本控制系统作用:版本控制(版本的备份--->版本的回溯和前进)多人协作优势:SVN(集中式)劣势:过度依赖服务器和网络,容灾性差Git…

yolo目标检测技术之yolov11项目实战(三)

yolo目标检测技术之yolov11项目实战(三) 文章目录yolo目标检测技术之yolov11项目实战(三)一、 基于 YOLO11 的火焰与烟雾检测系统(实战代码)项目目标环境搭建创建虚拟环境安装依赖1.1 数据集准备1. 下载地址…

CF思维小训练(二)

清晰的缤纷的都可以 脏兮兮的甜的也都有转机 不想太小心 错过第一百零一场美丽 CF思维小训练(二) 书接上回CF思维小训练-CSDN博客 虽然代码很短,都是每一道题的背后都思维满满; 目录CF思维小训练(二)Arbo…

分布式锁:从理论到实战的深度指南

1. 分布式锁是啥?为什么它比单机锁更“硬核”?分布式锁,听起来高大上,其实核心问题很简单:在多个机器、进程或服务同时抢夺资源时,怎么保证不打架? 想象一下,你在双十一抢购限量款球…

基于UniApp的智能在线客服系统前端设计与实现

了解更多,搜索“程序员老狼”一、引言在当今数字化时代,客户服务已成为企业竞争力的重要组成部分。本文将详细介绍一款基于UniApp框架开发的跨平台智能客服系统前端实现方案,该系统不仅具备传统客服功能,还融入了现代即时通讯和人…

react与vue的对比,来实现标签内部类似v-for循环,v-if等功能

前言:在vue中我们提供了很多标签方法,比如用的比较多的v-for循环内容,v-if/v-show等判断,可以直接写在标签中,大大提高了我们的开发效率,那么在react中有没有类似的方法呢?我们这里来说一说。re…

PCB工艺-四层板制作流程(简单了解下)

一)流程:四层板的内层芯板,是由一张双面覆铜板PP*2铜箔*2覆铜板蚀刻好线路,就是我们的芯板了PP全名叫半固化片,主体是玻璃纤维布环氧树脂,是绝缘介质铜箔片,是单独一张铜箔,很薄&…

无人机三维路径规划

文章目录 1、引言 2、背景知识 3、核心算法 4、挑战与优化 5、初始效果 6、需要改进地方 7、水平方向优化路线 8、垂直方向优化路线 9、与经过路线相交的网格都绘制出来 1、引言 介绍三维路径规划的定义和重要性:在无人机、机器人导航、虚拟现实等领域的应用。 概述文章目标和…

Spring-解决项目依赖异常问题

一.检查项目的Maven路径是否正确在确保新项目中的依赖在自己的电脑中已经存在的情况下:可以检查项目的Maven路径是否正确在拿到一个新项目时,要检查这个项目的Maven路径是自己电脑上设置好的Maven路径吗?如果不是,项目依赖会出问题…

系统设计——DDD领域模型驱动实践

摘要本文主要介绍了DDD(领域驱动设计)在系统设计中的实践应用,包括其在编码规范、分层架构设计等方面的具体要求和建议。重点强调了应用层的命名规范,如避免使用模糊的Handler、Processor等命名,推荐使用动词加业务动作…

开源卫星软件平台LibreCube技术深度解析

LibreCube技术深度解析:开源卫星软件平台的完整指南 LibreCube是一个专为CubeSat设计的模块化开源卫星软件平台,它通过整合姿态控制、通信管理和任务调度等核心功能,为立方星开发者提供了完整的解决方案。本文将全面剖析LibreCube的技术架构…

React(四):事件总线、setState的细节、PureComponent、ref

React(四) 一、事件总线 二、关于setState的原理 1. setState的三种使用方式 (1)基本使用 (2)传入一个回调 (3)第一个参数是对象,第二个参数是回调 2. 为什么setState要设置成异步 (1)提升性能,减少render次数 (2)避免state和props数据不同步 3. 获取异步修改完数…

CPUcores-【硬核优化】CPU增强解锁全部内核!可优化游戏性能、提升帧数!启用CPU全内核+超线程,以更高优先级运行游戏!支持各种游戏和应用优化~

软件介绍(文末获取)CPUCores:游戏性能优化利器‌这款工具,专为优化提升中低配电脑的帧数而生。其独创的CPU资源调度技术,能让老旧硬件焕发新生核心技术原理‌采用「内核级隔离」方案,通过:系统进…

HQA-Attack: Toward High Quality Black-Box Hard-Label Adversarial Attack on Text

文本对抗性攻击分为白盒攻击和黑盒攻击,其中黑盒攻击更贴近现实,又可分为软标签和硬标签设置,。这些名词分别是什么意思 在文本对抗性攻击中,“白盒攻击”“黑盒攻击”以及黑盒攻击下的“软标签”“硬标签”设置,核心差…