当前位置: 首页 > news >正文

Spring Bean:不只是“对象”那么简单

你一定见过这样的代码:

@RestController
public class UserController {@Autowiredprivate UserService userService; // ← 这个 userService 是什么?
}

这个 userService 是谁创建的?为什么不用 new?它从哪里来?为什么可以“自动注入”?

答案就是:它是一个 Spring Bean。但,到底什么是 Spring Bean

Spring Bean 是由 Spring 容器创建、管理、装配和生命周期控制的 Java 对象。

换句话说:

  • 它是一个普通的 Java 对象(POJO)
  • 但它“归 Spring 管”
  • Spring 负责它的 创建、依赖注入、初始化、销毁

Spring Bean 的核心特征

特征说明
✅ 由 Spring 容器创建不用 new,Spring 自动实例化
✅ 受 Spring 管理生命周期(初始化、销毁)由 Spring 控制
✅ 支持依赖注入(DI)自动注入它需要的其他 Bean
✅ 可配置通过 XML、注解、Java Config 定义
✅ 有作用域单例、原型、请求级等

Bean 是怎么“注册”到 Spring 中的?

Spring 如何知道哪些类要变成 Bean?有三种方式:

1. 注解方式(最常用)

@Component      // 通用组件
@Service        // 业务逻辑层
@Repository     // 数据访问层
@Controller     // 控制器
@RestController // REST 控制器(Spring Boot)

只要类上有这些注解,并被组件扫描(@ComponentScan)扫到,就会成为 Bean。

@Service
public class UserService {public void saveUser() { ... }
}

2. Java Config 方式(推荐)

@Configuration
public class AppConfig {@Beanpublic UserService userService() {return new UserService();}
}

@Bean 方法的返回值就是一个 Bean。

3. XML 配置(老项目)

<bean id="userService" class="com.example.UserService"/>

💡现在主流是注解 + Java Config。

Bean 的作用域(Scope)

一个 Bean 不一定只有一个实例。Spring 支持多种作用域:

Scope说明使用场景
singleton(默认)每个容器只有一个实例大多数 Service、DAO
prototype每次获取都创建新实例需要独立状态的对象
request每个 HTTP 请求一个实例Web 请求处理
session每个用户会话一个实例用户登录状态
applicationServletContext 级别全局配置


文章转载自:

http://Sbbl56ea.mjbkp.cn
http://ZDxsLN1F.mjbkp.cn
http://95WP8y5c.mjbkp.cn
http://ktn0XkfF.mjbkp.cn
http://qrF9LUVl.mjbkp.cn
http://JS3JdbNZ.mjbkp.cn
http://w0ALiN0Q.mjbkp.cn
http://KAYTGW6P.mjbkp.cn
http://f4FGKAa6.mjbkp.cn
http://JRbz8gSZ.mjbkp.cn
http://R6gWgBNJ.mjbkp.cn
http://hvvXS5w9.mjbkp.cn
http://BHJwowQH.mjbkp.cn
http://PaV1KPWV.mjbkp.cn
http://JWbdVtnu.mjbkp.cn
http://1wK1MaVw.mjbkp.cn
http://aNWRXUEf.mjbkp.cn
http://M79DnAzs.mjbkp.cn
http://VEkc3DZg.mjbkp.cn
http://Jq4FaPlZ.mjbkp.cn
http://2RL0wMBJ.mjbkp.cn
http://yUXammpG.mjbkp.cn
http://QwtwoAm6.mjbkp.cn
http://8G3RJ6oP.mjbkp.cn
http://iKrKf2gx.mjbkp.cn
http://t4QoynAT.mjbkp.cn
http://WqXt5QoG.mjbkp.cn
http://2f2MgtC5.mjbkp.cn
http://l3fZVc5c.mjbkp.cn
http://SRqIJmWm.mjbkp.cn
http://www.dtcms.com/a/383787.html

相关文章:

  • 快速选中对象
  • ByteDance_FrontEnd
  • 中科方德环境下安装软件的几种方式与解决思路
  • 《一本书读懂 AI Agent》核心知识点总结
  • 【CVPR 2025】LSNet:大视野感知,小区域聚合
  • MyBatis 从入门到精通(第二篇)—— 核心架构、配置解析与 Mapper 代理开发
  • Ubuntu 虚拟机设置双向复制粘贴
  • Lombok添加了依赖缺没有生效
  • 嵌入式开发中的keil常见错误与警告解决方案(部分)
  • ES5 和 ES6 类的实现
  • 设计模式-装饰器模式详解
  • 对AQS的详解
  • 实验-基本ACL
  • 开始 ComfyUI 的 AI 绘图之旅-SDXL文生图和图生图(全网首发,官网都没有更新)(十四)
  • Java可用打印数组方法5中+常用变量转字符串方法
  • ssh远程连接服务器到vscode上“连接失败”
  • SpringBoot -原理篇
  • 设计模式——结构型模式
  • I.MX6ULL时钟(clock)与定时器(EPITGPT)
  • STM32_06_Systick定时器
  • 用 Java 学会 Protocol Buffers从 0 到 1 的完整实战
  • 237.删除链表中的节点
  • 【Vue2手录14】导航守卫
  • Qt如何读写xml文件,几种方式对比,读写xml的Demo工程
  • 子网划分专项训练-1,eNSP实验,vlan/dhcp,IP规划
  • 云原生改造实战:Spring Boot 应用的 Kubernetes 迁移全指南
  • 看门狗的驱动原理
  • [论文阅读] 人工智能 + 软件工程 | 大语言模型驱动的多来源漏洞影响库识别研究解析
  • 【前缀和+哈希表】P3131 [USACO16JAN] Subsequences Summing to Sevens S
  • 05.【Linux系统编程】进程(进程概念、进程状态(注意僵尸和孤儿)、进程优先级、进程切换和调度)