认识SpringIOC容器

news2024/12/26 23:35:42

目录

一、SpringFrameWork

二、SpringIOC容器

三、SpringIoc的核心功能


一、SpringFrameWork

1.SpringFrameWork与Spring之间的关系

SpringFrameWork是SpringCould、SpringMVC等等技术的基础实现的,而所有的SpringCloud、SpringFrameWork、SpringMVC等等技术组合起来就形成了Spring大家族。

 广义:

  1. 广义上的 Spring 泛指以 Spring Framework 为基础的 Spring 技术栈。
  2. 经过十多年的发展,Spring 已经不再是一个单纯的应用框架,而是逐渐发展成为一个由多个不同子项目模块)组成的成熟技术,例 Spring Framework,Spring MVCSpringBoot,Spring Cloud, Spring Data Spring Security等, Spring Framework是其他子项目的基础。
  3. 这些子项目涵盖了从企业级应用开发到云计算等各方面的内容,能够帮助开发人员解决软件发展过程中不断产生的各种实际问题,给开发人员带来了更好的开发体验。

狭义:

  1. 狭义的 Spring 特指 Spring Framework,通常我们将它称为 Spring 框架。
  2. Spring Framework(Spring 框架)是一个开源的应用程序框架,由 SpringSource 公司开发,最初是为了解决企业级开发中各种常见问题而创建的。它提供了很多功能,例: 依赖注入 (Dependency lnietion)、面向切面编程(AOP)、声明式事务管理(TX)等。其主要目标是使企业级应用程序的开发变得更加简单和快速,并 Spring 框架被广泛应用于 Java 企业开发领域。
  3. Spring 全家桶的其他框架都是以 SpringFramework框架为基础!

1.2作为一个基础框架,需要认识什么是框架

框架= jar包与配置文件的组合。

比如log4j 与dbutil的区别。

dbutil(数据库简化技术):只是单纯的jar包,只是用其相关的方法,所以其只是一个工具类log4j(日志输出技术):虽然其jar包中只有两个方法,但是它可以配置相关的log4j.propertis来进行对日志输出的内容进行修改,所以这就是一种框架。

1.3 SpringFrameWork的功能

SpringFrameWork有四个最重要的功能,分别是Core Container、AOP&Aspect、TX、SpringMVC。

功能模块功能介绍
Core Container在Spring环境下使用任何功能必须基于IOC容器
AOP & Aspects面向切面编程
TX声明式事务管理
Spring MVC面向Web应用程序的集成功能

1.4SpringFrameWork的优点

  1. 丰富的生态:Spring Framework有庞大的开源社区支持,提供了多种扩展和插件,如Spring Security、Spring Data等,丰富了开发者的选择和可扩展性。
  2. 模块化设计:Spring Framework采用模块化设计,将功能拆分为独立的模块,开发者可以根据需求选择使用不同的模块,提高了项目的灵活性和可维护性。
  3. 简化Java的开发:Spring Framework提供了依赖注入(DI)和面向切面编程(AOP)等特性,简化了Java应用程序的开发流程,减少了样板代码的编写,提高了开发效率。
  4. 不断创新和发展:Spring Framework持续进行技术创新和发展,引入了新的特性和功能,如响应式编程、函数式编程等,不断满足不同场景下的开发需求,并与时俱进。

二、SpringIOC容器

2.1 SpringIOC容器与普通容器的区别

首先认识什么是普通容器和复杂容器

  • 普通容器:就比如Java类集框架中的集合,只能进行存放和取出功能
  • 复杂容器:可以管理内容之间的联系等一些较为复杂的事务,比如servlet容器,能够接收请求信息并且对请求信息进行操作

SpringIoc可以管理组件的容器,就是一个复杂容器,不仅能够存储组件,还能够管理组件之间的依赖关系,并且创建和销毁组件等。

2.2 什么是组件

组件,就是能够重用的对象

比如在三层框架中,可以将三层架构拆分成三个组件

2.3 Spring管理组件有什么优势

  1. 降低组件之间的耦合性:Spring管理组件通过依赖注入(DI)来实现,使得组件之间的依赖关系由容器动态管理,降低了组件之间的紧耦合,提高了代码的可扩展性和灵活性。
  2. 提高了代码的可重用和可维护性:通过将组件的创建和配置交给Spring容器管理,可以在不修改原有代码的情况下,灵活地替换、升级和配置组件,提高了组件的可重用性和可维护性。
  3. 方便了配置和管理:Spring提供了丰富的配置方式,如XML配置、注解配置和Java配置,可以灵活地进行组件的配置和管理,同时Spring容器统一管理组件的生命周期,简化了组件的配置和管理过程。
  4. 交给Spring管理的对象(组件),可以享受到Spring框架的其他功能比如AOP、事务声明等

2.4 SpringIoc实现的具体接口与实现类

1.两个具体接口

接口功能介绍
BeanFactory提供了IOC容器的基本功能,用于管理和获取Bean对象
ApplicationContext在BeanFactory基础上提供了更多高级功能,如事件处理、国际化支持等

 两个接口的关系:

  1. BeanFactory是Spring的最基本容器,提供了IoC容器的基本功能,用于管理和获取Bean对象。它是一个工厂模式的实现,负责创建和管理Bean的生命周期及依赖关系。BeanFactory具有延迟加载的特性,只有当需要获取Bean时才会实例化。
  2. ApplicationContext是在BeanFactory的基础上进行扩展得到的,它提供了更多高级功能和特性。ApplicationContext在启动时会预先实例化和初始化所有的Bean对象,将其缓存在容器中,因此可以提供更快的访问速度。除了BeanFactory的功能,ApplicationContext还支持事件处理、国际化支持、资源加载等方面的功能。

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

2.5ApplicationContext接口的四个实现类

类型名描述
ClassPathXmlApplicationContext通过读取类路径下的XML格式的配置文件创建IOC容器对象。适用于将配置文件放在项目的类路径下,如src/main/resources目录下的配置文件。
FileSystemXmlApplicationContext通过文件系统路径读取XML格式的配置文件创建IOC容器对象。适用于指定绝对路径或相对路径的配置文件。
AnnotationConfigApplicationContext通过读取Java配置类创建IOC容器对象。适用于基于注解的配置方式,不需要使用XML文件进行配置。
WebApplicationContext专门为Web应用准备,基于Web环境创建IOC容器对象,并将对象引入存入ServletContext域中。适用于Web项目,可以获取Web相关的上下文信息。

一个Spring框架只需要选择一种子类实现方式

以下就是四种实现类的实现方式的条件

  • ClassPathApplicationContext:1.使用XML配置 2.项目的类路径下resource
  • FileSystemApplicationContext:1.使用XML配置2.文件存储到项目外,某个盘符下
  • AnnotationConfigApplicationContext:1.配置文件使用Java类
  • WebApplicationContext:1.web项目对应ioc容器

2.6 Spring框架的配置方式

  1. XML配置方式:

    • 描述:Spring最早的配置方式之一,通过XML文件定义Bean和其依赖关系、作用域等信息,由Spring IOC容器管理Bean之间的依赖关系。
    • 特点:从Spring框架第一版开始提供支持。
  2. 注解方式:

    • 描述:从Spring 2.5版本开始提供支持,使用注解替代XML配置文件中的配置信息。通过在Bean类上使用注解(如@Component、@Service、@Autowired等),将Bean注册到Spring IOC容器中,实现依赖关系的管理。
    • 特点:简化配置,提高开发效率。
  3. Java配置类方式:

    • 描述:从Spring 3.0版本开始提供支持,使用Java类来定义Bean对象、依赖关系和配置信息,取代XML配置文件的方式。通过@Configuration、@Bean等注解实现Bean和依赖关系的配置。
    • 特点:使用Java代码编写配置,类型安全性高,可利用面向对象的特性进行配置。

现在主流的配置:配置类+注解方式(迎合SpringBoot)为主进行注解


三、SpringIoc的核心功能

Spring的核心功能就两点:SpringIoc(控制反转)和DI(依赖注入)

什么是控制反转Ioc(Inversion of controll)

        是指将对象的创建和调用控制从应用程序转移到容器中的一种设计原则。在IoC中,应用程序不再直接创建和管理对象,而是由IoC容器负责创建和管理对象,并通过依赖注入的方式将对象的依赖关系注入到应用程序中。

主要特点如下:

  • 控制权转移:应用程序不再直接控制对象的创建和调用,而是委托给IoC容器进行管理。
  • 依赖注入:通过依赖注入的方式,将对象的依赖关系注入到应用程序中,解决了对象之间的耦合性,提高了代码的灵活性和可测试性。
  • 依赖查找:应用程序通过IoC容器来查找需要使用的对象,而不是自己创建对象,减少了代码的依赖关系。

什么是依赖注入DI(Dependency inject)

创建A、B两个对象,B对象通过setter等方式将对象A传入对象B中

依赖注入(Dependency Injection,DI)是指在组件之间传递依赖关系的过程中,将依赖关系的处理交给容器来完成,从而避免在应用程序代码中硬编码对象之间的依赖关系,实现对象之间的解耦。在Spring框架中,DI可以通过XML配置文件或注解的方式进行实现,并提供了三种形式的依赖注入:

  1. 构造函数注入(Constructor Injection):通过在类的构造函数上标注注解或在XML配置文件中配置对应的依赖项,容器在创建对象时会自动将所需的依赖关系作为参数传递给构造函数,完成对象的创建和依赖注入。

  2. Setter方法注入(Setter Injection):通过在类的Setter方法上标注注解或在XML配置文件中配置对应的依赖项,容器在创建对象后调用相应的Setter方法并传入所需的依赖对象,完成对象的依赖注入。

  3. 接口注入(Interface Injection):通过在类中定义接口类型的成员变量,并在类中实现对应的接口,在XML配置文件中配置对应的依赖项,容器在创建对象后,将依赖对象通过调用接口方法来注入到类中。


总结:

1.知道SpringFrameWork和Spring的关系

2.掌握SpringFrameWork的核心功能

3.掌握SpringIoc的两个接口与四个实现

4.掌握Spring框架配置的三种方式

5.认识Ioc控制反转与DI依赖注入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/918643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spring之深入理解Spring框架的核心模块与功能

深入理解Spring框架的核心模块与功能 标题: 深入理解Spring框架的核心模块与功能摘要:引言:词汇解释:详细介绍:详细介绍Spring的核心模块:Spring Core、Beans、ContextSpring Core:Beans:Context: 注意事项:Spring数据访问模块:JDBC、ORM、事务管理JDBC&…

【LVS集群】

目录 一、集群概述 1.负载均衡技术类型 2.负载均衡实现方式 二、LVS结构 1.三层结构 2.架构对象 三、LVS工作模式 四、LVS负载均衡算法 1.静态负载均衡 2.动态负载均衡 五、ipvsadm命令详解 1. -A 2. -D 3. -L 4. -a 5. -d 6. -l 7. -t 8. -s 9. -r 10. -…

【IDEA配置创建类注释模板和方法模板教程】

IDEA配置创建类注释模板和方法模板教程 废话不多说直接上干货 废话不多说直接上干货 先看效果: 类: 方法: IDEA类注释模板 ,配置步骤; 直接用模板: /*** description: ${description}* author: Lynn.OuYang* create: ${YEAR}-${MONTH}-${DAY} ${HOU…

实验六 u-boot-2013.01移植

【实验目的】 了解u-boot 的代码结构及移植的基本方法 【实验环境】 ubuntu 14.04发行版FS4412实验平台交叉编译工具arm-none-linux-gnueabi- 【注意事项】 实验步骤中以“$”开头的命令表示在 ubuntu 环境下执行 【实验步骤】 一、建立自己的平台 下载uboot源码 在uboo…

怎么检测UI卡顿?(线上及线下)

什么是UI卡顿? 在Android系统中,我们知道UI线程负责我们所有视图的布局,渲染工作,UI在更新期间,如果UI线程的执行时间超过16ms,则会产生丢帧的现象,而大量的丢帧就会造成卡顿,影响用…

PDF校对工具正式上线,为用户提供卓越的文档校对解决方案

为满足当下对数字化文档校对的精准需求,我们今日正式发布全新的PDF校对工具。经过深入的技术研发与细致的测试,该工具旨在为企业和个人用户带来一个高效且准确的PDF文档校对平台。 PDF校对工具的主要特性: 1.全面性校对:工具支持…

尚硅谷大数据项目《在线教育之离线数仓》笔记003

视频地址:尚硅谷大数据项目《在线教育之离线数仓》_哔哩哔哩_bilibili 目录 第8章 数仓开发之DIM层 P039 P040 P041 P042 P043 P044 P045 P046 P047 P048 第8章 数仓开发之DIM层 P039 第8章 数仓开发之DIM层 DIM层设计要点: (1&a…

项目计划怎么写? 6 个步骤助你万无一失

项目计划是项目管理的关键步骤,如果跳过这一步,项目还未启动就已岌岌可危。 什么是项目计划? 项目计划是实现特定目标或成果的详细路线图。它是一份全面的文件,回答了 “谁”、“什么”、“为什么”、"如何 "和 "…

美容行业如何快速搭建自己的预约小程序?

现在,搭建一个专属于美容行业的预约小程序不再是只有程序员才能做到的事情了。有了一些小程序制作平台的存在,任何人都可以轻松地制作出自己的小程序。下面,我将揭秘一个快速搭建专属美容行业预约小程序的秘诀。 首先,登录小程序制…

wazuh--sql检测

官网:Virtual Machine (OVA) - Installation alternatives Wazuh(Wazuh The Open Source Security Platform):是一整套基于ossec安全检测工具和EFK日志工具构成的终端安全管理工具。不管是将其分类至HIDS,还是EDR,它都是一套通过…

【Linux】线程篇Ⅱ:

线程Ⅱ 🔗接上篇【线程篇Ⅰ】五、线程库 和 线程 id六、同步与互斥 🔗接上篇【线程篇Ⅰ】 👉【Linux】线程篇Ⅰ:线程和task_struct 执行流的理解、相关接口命令、线程异常、线程的私有和共享 五、线程库 和 线程 id 对于 Linux …

数藏平台遭到攻击怎么办?

数藏平台科技抢单以及DDoS攻击事件频发,造成服务器CPU耗尽,平台卡顿进不去,活动无法正常进行,攻击者入侵平台方数据库,恶意篡改账户余额,导致大量用户高价挂单仍可成交,最终导致数据异常&#x…

iFluor 594 Styramide是一种荧光染料,常用于生物分子标记和成像

试剂 | 基础知识概述(部分): 中文名称:Alexa Fluor 594酪Styramide 分子量:1341.71 胺的优异替代品 100 Slides 英文名称:iFluor 594 Ex (nm):588 Em (nm):604 规格标准:1g&am…

docker快速上手运行js代码(dockerfile、镜像、容器、docker desktop图形化界面的基本使用、dockercompose)

1、导入: 1.1:准备js文件 我们本地有一个文件夹"docker_learn",里面有一个index.js的文件,文件内只有一行代码 console.log("快速上手docker"); 1.2:运行js代码 我们使用vscode等ide打开这个…

pyqt5 多线程QThread自学记录

pyqt5多线程QThread自学记录 在编写qt的时候不加入多线程,运行程序往往会导致主进程卡死,比如执行下载某视频或者其他执行比较耗时的程序,泛滥了博客,就是没有理解怎么进行槽函数的关联和传递的 经过长时间的攻克,终于…

【附安装包】Dynaform 5.9.4安装教程

DYNAFORM是一款用于板料成形数值模拟的专用软件,是LS-DYNA求解器与ETA/FEMB前后处理器的完美结合,包含BSE、DFE、Formability三个大模块,几乎涵盖冲压模模面设计的所有要素,包括:定最佳冲压方向、坯料的设计、工艺补充…

界面设计软件都有哪些?推荐这7款

本文总结了7种“知名”软件界面设计工具,建议您尝试各种选择,以找到最适合您的UI设计工具。 对于UI设计师来说,应用程序的界面设计和制作是最常见的。面对设计师的需求,市场上出现了各种各样的软件界面设计工具,百花齐…

国标GB28181视频平台EasyGBS国标平台无法正常启动的问题解决方案

EasyGBS国标视频云服务是基于国标GB/T28181协议的视频能力平台,可实现的视频功能包括:实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发&#…

4-4 Representing text Exercise

本文所用资料下载 一. Representing text Let’s load Jane Austen’s Pride and Prejudice. We first split our text into a list of lines and pick an arbitrary line to focus on: with open(D:jane-austen/1342-0.txt, encodingutf8) as f:text f.read() lines text.…

UE4与pycharm联合仿真的调试问题及一些仿真经验

文章目录 ue4与pycharm联合仿真的调试问题前言ue4端的debug过程pycharm端 一些仿真经验小结 ue4与pycharm联合仿真的调试问题 前言 因为在实验中我需要用到py代码输出控制信息给到ue4中,并且希望看到py端和ue端分别在运行过程中的输出以及debug调试。所以&#xf…