news 2026/4/16 14:27:33

IoC容器和bean概述

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
IoC容器和bean概述

目录

说明: 3

Spring IoC容器和Bean介绍 4

容器概述 4

配置元数据 5

XML 9

作为外部配置DSL 9

构建基于XML的配置元数据 10

使用容器 11

Bean概述 12

重写bean 13

命名Bean 13

在 Bean 定义之外别名一个 Bean 13

实例化bean 14

使用构造函数实例化 14

使用静态工厂方法进行实例化 15

确定Bean的运行时类型

说明:

1.Spring Framework版本:7.0.1

2.开发框架:Spring boot(版本4.0.0)

3.开发工具:eclipse

4.jdk版本:25

Spring IoC容器和Bean介绍

本章介绍了 Spring 框架对控制反转(IoC)原则的实现。依赖注入(DI)是 IoC 的一种特殊形式,其中对象仅通过构造函数参数、工厂方法的参数或在对象实例创建后或从工厂方法返回后设置的属性来定义其依赖关系(即它们所协作的其他对象)。然后,IoC 容器在创建 bean 时注入这些依赖关系。这一过程从根本上说与 bean 本身通过直接构造类或使用诸如服务定位器模式之类的机制来控制其依赖关系的实例化或定位相反(因此得名控制反转)。

注:所谓的控制反转,就是在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制,对于spring框架来说,就是由Spring来负责控制对象的生命周期和对象间的关系

org.springframework.beans和org.springfamework.context包是Spring Framework的IoC容器的基础。BeanFactory接口提供了一种高级配置机制,能够管理任何类型的对象。ApplicationContext是BeanFactory的一个子接口。它增加了:

  • 更容易与Spring的AOP功能集成

  • 消息资源处理(用于国际化)

  • 事件发布

  • 应用层特定的上下文,如web应用程序中使用的WebApplicationContext。

简而言之,BeanFactory提供了配置框架和基本功能,ApplicationContext添加了更多特定于企业的功能。ApplicationContext是BeanFactory的一个完整超集,在本章中专门用于描述Spring的IoC容器。有关使用BeanFactory而不是ApplicationContext的更多信息,请参阅有关BeanFactory API的部分。

在Spring中,构成应用程序骨干并由Spring IoC容器管理的对象称为bean。bean是由Spring IoC容器实例化、组装和管理的对象。否则,bean只是应用程序中众多对象中的一个。bean以及它们之间的依赖关系反映在容器使用的配置元数据中。

容器概述

`org.springframework.context.ApplicationContext` 接口代表了 Spring 的 IoC 容器,负责实例化、配置和组装 Bean。容器通过读取配置元数据来获取有关要实例化、配置和组装的组件的指令。配置元数据可以表示为带有注解的组件类、具有工厂方法的配置类,或者外部的 XML 文件或 Groovy 脚本。无论采用哪种格式,您都可以构建您的应用程序以及这些组件之间丰富的相互依赖关系。

ApplicationContext接口的几个实现是核心Spring的一部分。在独立应用程序中,通常会创建AnnotationConfigApplicationContext或ClassPathXmlApplicationContext的实例。

在大多数应用场景中,不需要显式用户代码来实例化Spring IoC容器的一个或多个实例。例如,在普通web应用程序场景中,应用程序的web.XML文件中的简单样板web描述符XML就足够了(请参阅web应用程序的方便ApplicationContext实例化)。在Spring Boot场景中,应用程序上下文是基于常见的设置约定隐式引导的。

下图显示了Spring工作原理的高级视图。您的应用程序类与配置元数据相结合,以便在创建和初始化ApplicationContext后,您拥有一个完全配置和可执行的系统或应用程序。

配置元数据

如上图所示,Spring IoC容器使用一种形式的配置元数据。此配置元数据表示作为应用程序开发人员,您如何告诉Spring容器实例化、配置和组装应用程序中的组件。

Spring IoC容器本身与实际编写配置元数据的格式完全解耦。现在,许多开发人员为他们的Spring应用程序选择基于java的配置:

  • 基于注解的配置:在应用程序的组件类上使用基于注解的配置元数据定义bean。

  • 基于java的配置:通过使用基于java的配置类来定义应用程序类外部的bean。要使用这些特性,请参阅@Configuration、@Bean、@Import和@DependsOn注解。

注:

基于注解配置‌:通过在Java类或方法上添加注解(如@Component@Service@Repository@Controller等)来声明Bean和依赖关系。

基于Java配置:通过创建一个配置类(使用@Configuration注解),并在其中定义Bean方法(使用@Bean注解)。

Spring配置由容器必须管理的至少一个(通常是多个)bean定义组成。Java配置通常在@Configuration类中使用带有@ bean注解的方法,每个方法对应一个bean定义。

这些bean定义对应于构成应用程序的实际对象。通常,您定义服务层对象、持久化层对象(如存储库或数据访问对象)、表示对象(如Web控制器)、基础设施对象(如JPA EntityManagerFactory)、JMS队列等。通常,不需要在容器中配置细粒度的域对象,因为创建和加载域对象通常是存储库和业务逻辑的责任。

基于注解配置的测试代码

创建一个spring boot工程Annotation-basedContainerConfiguration

,将下列3类复制到工程中:AppConfig.java、AccountRepository.java、TransferService.java

AppConfig.java

package com.example.demo.configuration; public class AppConfig { }

AccountRepository.java

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

WeClone实战:从零搭建电商平台克隆

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个电商平台克隆工具,允许用户输入现有电商网站URL或功能描述,自动生成具有类似功能的完整电商系统。包括商品展示、购物车、支付接口、用户管理等核心…

作者头像 李华
网站建设 2026/4/8 21:09:48

1小时打造定制版Furmark:满足特殊测试需求

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个Furmark定制化原型工具,允许用户:1. 选择不同的渲染着色器 2. 自定义测试时长和分辨率 3. 添加硬件传感器数据采集 4. 修改压力测试算法 5. 导出定制…

作者头像 李华
网站建设 2026/4/15 20:19:45

AI教你3种方法快速查询电脑开机时间

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个Python脚本,使用psutil库自动检测电脑的开机时间,并将结果格式化为易读的日期和时间。脚本应包含错误处理,确保在不同操作系统&#xff…

作者头像 李华
网站建设 2026/4/16 7:20:29

快速验证UI设计:文字截断原型生成器

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个可交互的UI原型生成器,允许用户通过参数配置:1) 容器宽度 2) 字体大小 3) 行数限制 4) 省略号颜色。实时生成预览并输出对应的CSS代码。要求包含预设…

作者头像 李华
网站建设 2026/4/11 7:14:29

零基础入门:用bpmn-js画你的第一个流程图

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个交互式bpmn-js新手教程,包含:1)嵌入式代码编辑器显示基础配置 2)分步指引构建请假审批流程(开始事件→员工申请→…

作者头像 李华
网站建设 2026/4/12 0:13:33

零基础玩转NVIDIA容器工具包:从安装到第一个AI容器

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个交互式学习教程,包含:1) 分步检查系统环境;2) 安装NVIDIA Container Toolkit的自动化脚本;3) 运行测试容器的简单UI界面&…

作者头像 李华