news 2025/12/22 23:30:08

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进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/22 18:40:38

如何用AI快速生成Flink面试题答案?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个AI辅助工具,能够根据用户输入的Flink面试题自动生成详细的解答。解答应包括:1. 问题分析;2. 核心概念解释;3. 代码示例&…

作者头像 李华
网站建设 2025/12/22 2:41:46

10分钟搞定:DeepSeek本地开发环境快速搭建方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个DeepSeek快速部署工具包,包含:1. 针对常见开发场景的预配置模板(NLP/CV/数据分析等) 2. 一键安装脚本 3. 最小化硬件检测工具…

作者头像 李华
网站建设 2025/12/14 18:40:38

豆包AI手机智能操控的硬核原理

深度解析豆包AI手机如何通过感知-规划-行动循环与Android无障碍服务,实现从自然语言指令到手机APP端到端操作的自动化全流程。 1 案例实战:浏览器新闻搜索 1.1 初始阶段:宏观规划 输入: 用户指令 打开浏览器搜索今天的新闻。 规划结果: 大模型通过 截图+指令 在后台生成…

作者头像 李华
网站建设 2025/12/22 9:08:18

CVE-2023-48795漏洞深度解析:原理与影响

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 生成一个关于CVE-2023-48795漏洞的技术分析报告,包括漏洞类型、受影响系统、攻击向量、潜在危害等级以及缓解措施建议。报告需包含代码示例展示漏洞利用方式&#xff0c…

作者头像 李华
网站建设 2025/12/19 12:25:53

深入解析strspn:字符串扫描的精确尺子

<摘要> strspn是C标准库中一个极具特色的字符串函数&#xff0c;它像一把精确的尺子&#xff0c;用于测量字符串开头连续包含在指定字符集中的字符数量。本文将用生活化的比喻&#xff08;如安检通道、货币兑换窗口等&#xff09;生动解释其功能&#xff0c;详细剖析函数…

作者头像 李华
网站建设 2025/12/14 18:38:18

纺织AI设计系统:用技术重构创意与效率

在纺织行业摸爬滚打多年的设计师都有过这样的困扰&#xff1a;为了一款面料图案反复修改数周&#xff0c;打样多次仍不达标&#xff1b;人工检测面料瑕疵全凭经验&#xff0c;漏检、误判时有发生&#xff1b;配色全靠老师傅手感&#xff0c;新手需要多年积累才能胜任。而纺织AI…

作者头像 李华