news 2026/6/15 23:26:40

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/6/15 16:35:22

传奇3韩国新地图怪物和爆率介绍

传奇3韩国新地图怪物介绍韩国版本传奇3通常会推出一些独特的新地图,这些地图中的怪物设计往往与经典版本有所不同。以下是一些可能出现在韩国新地图中的怪物类型:高等级怪物 新地图通常包含等级较高的怪物,攻击力和生命值较强,适合…

作者头像 李华
网站建设 2026/6/15 18:17:17

小白也能懂的连接错误解决指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个交互式新手学习应用:1. 用快递送货比喻网络连接 2. 设计5个常见错误的动画演示 3. 提供一键检测按钮 4. 输出带emoji的简单报告 5. 内置救命按钮连接社区支持。…

作者头像 李华
网站建设 2026/6/15 18:47:09

1小时验证创意:VLA原型开发实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 提供三个可选原型模板:1) 社交媒体自动标注工具 2) 无障碍阅读辅助器 3) 智能相册管理器。用户选择模板后,自动生成对应代码框架和示例数据集。每个模板预置…

作者头像 李华
网站建设 2026/6/15 13:32:55

AI如何用WeClone重构你的开发流程

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个基于WeClone的AI辅助开发工具,能够分析现有项目代码库,自动生成相似功能的代码片段或完整模块。支持多种编程语言,具备智能补全、错误检…

作者头像 李华
网站建设 2026/6/15 13:35:10

Gradle插件异常?新手也能轻松搞定

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个面向Gradle新手的交互式学习工具,专门讲解org.gradle.api.internal.plugins.pluginapplicationexception: failed错误的处理。包含:1. 基础概念讲解…

作者头像 李华