Spring Framework的核心:IoC容器的实现(1)

这篇具有很好参考价值的文章主要介绍了Spring Framework的核心:IoC容器的实现(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring Framework的核心:IoC容器的实现(1),系统SSM框架学习——精通Spring,spring,数据库,java


Spring Framework的核心:IoC容器的实现(1),系统SSM框架学习——精通Spring,spring,数据库,java


个人名片:

🐼作者简介:一名大二在校生
🐻‍❄️个人主页:落798.
🐼个人WeChat:落798.
🕊️系列专栏:零基础学java ----- 重识c语言 ---- 计算机网络【Spring技术内幕】
🐓每日一句:看淡一点在努力,你吃的苦会铺成你要的路!


2.1 Spring IoC容器概述

Spring 容器是 Spring 框架的核心。 容器将创建对象、将它们连接在一起、配置它们并管理它们从创建到销毁的完整生命周期。 Spring 容器使用 DI 管理构成应用程序的组件。 这些对象称为 Spring Bean。

容器通过读取提供的配置元数据来获取关于要实例化、配置和组装哪些对象的指令。 配置元数据可以由 XML、Java 注解或 Java 代码表示。 下图展示了 Spring 工作原理的高级视图。 Spring IoC 容器利用 Java POJO 类和配置元数据来生成一个完全配置和可执行的系统或应用程序。

Spring Framework的核心:IoC容器的实现(1),系统SSM框架学习——精通Spring,spring,数据库,java
Spring IoC负责创建对象、管理对象(通过依赖注入(DI)、装配对象、配置对象,并且管理这些对象的整个生命周期。

其实IoC包括依赖查找(DL)和依赖注入(DI);只不过DL因为有侵入性 (它需要用户自己去是使用 API 进行查找资源和组装对象),已经被抛弃。所以现在提到IoC,更多的想到的就是依赖注入(DI)了。

Spring Framework的核心:IoC容器的实现(1),系统SSM框架学习——精通Spring,spring,数据库,java

  • IOC: Spring 反向控制应用程序需要的资源。

  • DI: 应用程序依赖Spring为其提供资源。

其中的DI—Dependency Injection,即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”。
谁依赖于谁:

  • 当然是应用程序依赖于IoC容器;

为什么需要依赖:

  • 应用程序需要IoC容器来提供对象需要的外部资源;

谁注入谁:

  • 很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;

注入了什么:

  • 就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。

2.1.1IoC容器的依赖反转模式

依赖反转是一种软件设计原则,它使得高层模块不依赖于低层模块的具体实现,而是依赖于抽象接口或者抽象类。

在传统的开发中,对象的创建和管理通常由对象自身负责,一个对象会直接创建并管理其所依赖的其他对象。这种情况下,高层模块对低层模块的实现产生了依赖,导致代码的耦合度增加。

具体来说,Spring的IoC容器将对象的创建和管理以及对象间的依赖关系的处理交给了容器来完成。开发人员只需要在配置文件或注解中声明对象的依赖关系,而不需要显式地去创建对象或解决对象之间的依赖。

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

  • 更容易与Spring的AOP功能集成
  • Message resource 处理(用于国际化)
  • 事件发布
  • 应用层的特定上下文,如 WebApplicationContext,用于 web 应用

简而言之,BeanFactory 提供了配置框架和基本功能,而 ApplicationContext 则增加了更多的企业特定功能。ApplicationContext 是 BeanFactory 的一个完整的超集。

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

2.1.2 IoC容器的两种表现形式

容器 描述
Spring BeanFactory 容器 这是为 DI 提供基本支持的最简单的容器,由 org.springframework.beans.factory.BeanFactory 接口定义。 Spring 中仍然存在 BeanFactory 及其相关接口,如BeanFactoryAwareInitializingBeanDisposableBean,目的是为了向后兼容大量与 Spring 集成的第三方框架。
Spring ApplicationContext 容器 此容器添加了更多特定于企业的功能,例如从属性文件解析文本消息的能力以及将应用程序事件发布到感兴趣的事件侦听器的能力。 这个容器由 org.springframework.context.ApplicationContext 接口定义。

2.1.3 IoC容器的介绍和使用:

BeanFactory容器的使用:

这是为 DI 提供基本支持的最简单的容器,由 org.springframework.beans.factory.BeanFactory 接口定义。 Spring中仍然存在BeanFactory及其相关接口,如BeanFactoryAware、InitializingBean、DisposableBean,目的是为了向后兼容大量与Spring集成的第三方框架。

有许多 BeanFactory 接口的实现直接随 Spring 提供。 最常用的 BeanFactory 实现是 XmlBeanFactory 类。 此容器从 XML 文件中读取配置元数据,并使用它来创建完全配置的系统或应用程序。

在资源有限的情况下,如移动设备或基于小程序的应用程序,BeanFactory 通常是首选。 因此,除非您有充分的理由不这样做,否则请使用 ApplicationContext。

public static void main(String[] args){
    //ClassPathResource加载在路径CLASSPATH下可用的xml配置文件
    //XmlBeanFactory负责创建并初始化所有对象即xml文件中的bean
    XmlFactory factory = new XmlBeanFactory(new ClassPathResource("_.xml"));    
    类名 对象名 =(类名)factory.getBean("_");
}

ApplicationContext 容器的使用:

Application Context 应用程序上下文是 Spring 的高级容器。 与 BeanFactory 类似,它可以加载 bean 定义、将 bean 连接在一起并根据请求分发 bean。 此外,它还添加了更多特定于企业的功能,例如从属性文件解析文本消息的能力以及将应用程序事件发布到感兴趣的事件侦听器的能力。 该容器由 org.springframework.context.ApplicationContext 接口定义。

常用的 ApplicationContext 实现

  • FileSystemXmlApplicationContext − 这个容器从一个 XML 文件中加载 bean 的定义。 这里需要将 XML bean 配置文件的完整路径提供给构造函数。

  • ClassPathXmlApplicationContext − 这个容器从一个 XML 文件中加载 bean 的定义。 这里您不需要提供 XML 文件的完整路径,但您需要正确设置 CLASSPATH,因为此容器看起来像 CLASSPATH 中的 bean 配置 XML 文件。

  • WebXmlApplicationContext − 此容器从 Web 应用程序中加载包含所有 bean 定义的 XML 文件。

public static void main(String[] args){
    //ApplicationContext接口的实现类有很多种,这里使用ClassPathXmlApplicationContext
    ApplicationContext app = new ClassPathXmlApplicationContext("_.xml");
    类名 对象名 =(类名)app.getBean("_");
}

下期预告: Bean 概述以及如何构建和使用容器

一个Spring IoC容器管理着一个或多个Bean。这些Bean是用你提供给容器的配置元数据创建的(例如,以XML 定义的形式)。

在容器本身中,这些Bean定义被表示为 BeanDefinition 对象,它包含(除其他信息外)以下元数据。

  • 一个全路径类名:通常,被定义的Bean的实际实现类。

  • Bean的行为配置元素,它说明了Bean在容器中的行为方式(scope、生命周期回调,等等)。

  • 对其他Bean的引用,这些Bean需要做它的工作。这些引用也被称为合作者或依赖。

  • 要在新创建的对象中设置的其他配置设置—​例如,pool的大小限制或在管理连接池的Bean中使用的连接数。

写在后面🔥🔥🔥:

本专栏是自己深入学习并结合Spring技术内幕一经典图书内容做出的的心得与总结,将其精简编写成一篇专栏供大家学习,希望对新学习Spring框架技术的小伙伴有所帮助。

图书推荐
Spring Framework的核心:IoC容器的实现(1),系统SSM框架学习——精通Spring,spring,数据库,java


Spring Framework的核心:IoC容器的实现(1),系统SSM框架学习——精通Spring,spring,数据库,java

欢迎添加微信,加入我的核心小队,请备注来意

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇文章来源地址https://www.toymoban.com/news/detail-612986.html

到了这里,关于Spring Framework的核心:IoC容器的实现(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Spring 6 IOC容器加载过程与核心方法refresh源码浅析

    Spring 6 IOC容器加载过程与核心方法refresh源码浅析

    前言:本篇只对主线核心逻辑进行梳理分析,本篇以AnnotationConfigApplicationContext容器为例进行切入分析【Spring版本为: v6.0.2】 我们启动容器的时候,虽然只是new了一个AnnotationConfigApplicationContext对象,但是在这个过程中spring处理了很多的事情。 创建AnnotationConfigApplicationContext对象

    2023年04月08日
    浏览(13)
  • Spring框架IOC容器和DI依赖注入

    IOC(Invertion Of Control):控制反转,使用对象时,由使用new创建对象转变为由外部提供对象,此过程中对象的创建控制权由程序转移到外部的思想称之为控制反转. DI(Dependency Injection):依赖注入,在容器中建立bean与bean之间的关系的过程,称之为依赖注入 pom.xml依赖引入 BookDao BookDaoImpl Book

    2023年04月09日
    浏览(17)
  • [SSM]Spring对IoC的实现

    目录 四、Spring对IoC的实现 4.1IoC控制反转 4.2依赖注入 4.2.1set注入 4.2.2构造注入 4.3set注入专题 4.3.1注入外部Bean 4.3.2注入内部Bean 4.3.3注入简单类型 4.3.4级联属性赋值 4.3.5注入数组 4.3.6注入List、Set、Map集合 4.3.7注入Properties 4.3.8注入null和空字符串 4.3.9注入的值中含有特殊符号 4.

    2024年02月16日
    浏览(5)
  • spring 容器结构/机制debug分析--Spring 学习的核心内容和几个重要概念--IOC 的开发模式--综合解图

    spring 容器结构/机制debug分析--Spring 学习的核心内容和几个重要概念--IOC 的开发模式--综合解图

    😀前言 本片文章是spring 容器结构/机制debug分析和几个重要概念以及IOC 的开发模式 🏠个人主页:[尘觉主页](https://blog.csdn.net/apple_67445472?type=blog) 🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉 在csdn获奖荣誉: 🏆csdn城市之星2名

    2024年02月02日
    浏览(19)
  • 造个轮子-任务调度执行小框架-IOC容器实现

    造个轮子-任务调度执行小框架-IOC容器实现

    忙里偷闲,今天终于是把概率论这块骨头干下来了。所以的话,留了点时间,把整个项目的结构和基本的功能给实现以下。通过昨天的一个功能的一个设计,我想应该可以明白我想干啥吧。这里的话,重复一下,那就是俺们要搞一个任务执行框架。 这个框架到底有啥用?举个

    2024年02月13日
    浏览(12)
  • spring6-实现简易版IOC容器

    我们都知道,Spring框架的IOC是基于Java反射机制实现的,下面我们先回顾一下java反射。 1、回顾Java反射 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调

    2024年02月08日
    浏览(10)
  • Spring中IOC容器常用的接口和具体的实现类

    在Spring框架没有出现之前,在Java语言中,程序员们创建对象一般都是通过new来完成,那时流行一句话“万物即可new,包括女朋友”。但是这种创建对象的方式维护成本很高,而且对于类之间的相互关联关系很不友好。鉴于这种情况,Spring框架应运而生,Spring框架绝对是

    2024年02月15日
    浏览(7)
  • java八股文面试[Spring]——如何实现一个IOC容器

    java八股文面试[Spring]——如何实现一个IOC容器

            IOC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出 松耦合 ,更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IOC容器后,把 创建和查找依赖对象 的控制

    2024年02月10日
    浏览(17)
  • Java项目:ssm框架基于spring+springmvc+mybatis框架的民宿预订管理系统设计与实现(ssm+B/S架构+源码+数据库+毕业论文)

    Java项目:ssm框架基于spring+springmvc+mybatis框架的民宿预订管理系统设计与实现(ssm+B/S架构+源码+数据库+毕业论文)

    本项目是一套ssm827基于SSM框架的民宿预订管理系统设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse 确保可以运行! 该系统功能

    2024年01月22日
    浏览(19)
  • 基于SSM框架实现的在线心理评测与咨询系统(技术栈 spring+springmvc+mybatis+jsp+jquery+css)

    基于SSM框架实现的在线心理评测与咨询系统(技术栈 spring+springmvc+mybatis+jsp+jquery+css)

    本项目是一套基于SSM框架实现的在线心理评测与咨询系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功

    2024年04月12日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包