Spring框架(1) -- Spring中的IoC和DI

Spring的IOC和DI Spring框架中的IOC(控制反转)和DI(依赖注入)是核心设计原则,旨在降低代码耦合度,提高应用程序的可测试性和可维护性。IOC通过将对象的创建权交给Spring容器,反转了传统的控制流程,而DI则是在对象创建过程中,由容器自动注入所需的依赖。IOC和DI相辅相成,共同实现解耦,使得开发者可以专注于业务逻辑,而不必手动管理对象的创建和依赖关系。DI主要有构造器注入、Setter注入和字段注入三种方式,各有优缺点。通过合理使用IOC和DI,可以构建出更加模块化、灵活且易于扩展的应用程序。 阅读详情

Spring中的IoC和DI


0、前言

此文章大概说了一下Spring的控制反转IoC以及依赖注入DI这两个在Spring中还是比较重要的思想,面试也会经常问(我猜的,毕竟我还没面试过哈哈),其实我也是初学者,最近在查漏补缺之前学习的SSM框架,这篇文章是结合之前学习Spring的笔记加上自己的一些理解写的,所以有错误的地方,请各位大佬们指出来 ^ _ ^。


1、Spring概述

Spring是一个以IoC和AOP为内核的框架。

IoC(Inversion of Control,控制反转)是Spring的基础,其实现的是一种控制,简单地说,就是以前使用new关键字调用构造器来创建对象,现在变成了使用Spring来创建对象。

DI(Dependency Inject,依赖注入)与IoC的含义相同,只不过是从两个不同的角度来描述同一个概念。


2、IoC 与 DI

2.1、什么是控制反转(IoC)

面向对象传统的编程方式中,通过new关键字来主动创建对象。Spring中的IoC方式对象的生命周期由Spring框架提供的IoC容器来管理,可以直接从IoC容器中获取一个对象,控制权从应用程序转交给IoC容器。

现在我们假设对象A依赖对象B,程序在没有引入IoC容器之前,那么在实例化对象A或者程序运行到某个点时,如果需要需要对象B,程序必须主动创建对象B或者使用已经实例化好的对象B,无论哪种情况,控制权都在程序手上。

当程序引入IoC容器后,对象A、B之间失去了直接联系,那么在实例化对象A或者程序运行到某个点时,如果需要需要对象B,IoC容器就会主动创建一个对象B注入(依赖注入)到程序对象A需要的地方。

因此,对于对象A获取依赖对象B的这个过程,控制主动权由程序转到IoC容器,简单点就是控制权颠倒了,这就是所谓的控制反转。

2.2、什么是依赖注入(DI)

IoC容器在运行期间动态地将某种依赖关系注入对象之中,这就是所谓的依赖注入。

上面我们也提到过,依赖注入和控制反转从不同角度描述同一个东西。

依赖注入从应用程序角度出发,应用容器依赖IoC容器创建并注入它所需要的资源。

控制反转从IoC容器角度出发,IoC容器控制应用程序,由容器向应用程序注入容器需要的资源。


3、Spring核心容器

Spring框架的主要功能通过其核心容器BeanFactory和ApplicationContext来实现的。

Spring IoC容器的主要组件:

  1. Beans:提供业务功能的Bean,即容器要管理的Bean。
  2. applicationContext.xml配置文件:实现Spring容器内Bean的装配以及Bean的管理。
  3. BeanFactory接口以及相关类:采用工厂设计模式,负责读取Bean的配置文件,管理Bean对象之间的依赖关系。
    • BeanFactory接口是一个顶级接口,常用的实现类:XmlBeanFactory。
  4. ApplicationContext接口以及相关类:基本功能与BeanFactory相似,提供访问资源更加方便的方法。
    • ApplicationContext接口常用的3个实现类:
      1. FileSystemXmlApplicationContext:从文件系统中的XML文件加载上下文中定义的信息。
      2. ClassPathXmlApplicationContext:从类路径中的XML文件加载上下文中定义的信息。
      3. XmlWebApplicationContext:从Web系统中的XML文件加载上下文中定义的信息。

Spring的IoC和DI思想我自己总结就大致如此,下一篇《Spring中的Bean》。

注:此文章为个人学习笔记,如有错误,敬请指正。

SDRAM控制器——添加读写FIFO 用FIFO实现数据缓存 阅读详情

相关推荐

深信服技术认证“SCCA-C”划重点:信服云托管云

该认证包括云数据中心基础、云计算基础、云计算关键技术、云计算交付和运维体系、云计算技术商业应用、信服云托管云、深信服超融合HCI、深信服桌面云aDesk、深信服分布式存储EDS、深信服应用交付AD。学习并获得SCCA-C认证后,可以具备深信服产品功能原理与实践,能够根据业务需求,协助完成云产品方案落地与实施;能够根据业务需求,完成深信服云产品的部署和管理的基本工作。为帮助大家更加系统化地学习云计算知识,高效通过云计算工程师认证,深信服特推出“SCCA-C认证备考秘笈”,共十期内容。

sangfor_edu的博客 613

Spring——IoC和DI

目录一、初识Spring为什么要使用Spring什么是SpringSpring框架的核心由哪些模块组成二、Core Container(核心容器)IoC(控制反转)什么是 IoCIoC 的作用IoC 的优点IoC 的缺点DI(依赖注入)什么是DI依赖注入的基本原则依赖注入的优势不同类型的依赖注入实现方式构造器依赖注入和 Setter方法注入的区别顶级接口BeanFactory 和 ApplicationContext 的区别BeanFactory和ApplicationContext的关系详解Applica

浪漫不死的博客 3897

Java写一条吃满屏幕的贪吃蛇(A*自动寻路算法和一些简单的策略) 二

上一篇文章介绍了一条贪吃蛇的简单实现,这一篇介绍贪吃蛇的自动寻路算法 ,说是自动寻路其实也就是一种遍历地图的算法,如果玩过游戏肯定知道游戏里面一般会有自动寻路功能,贪吃蛇的自动寻路算法也就是实现这个功能。下面慢慢介绍这种算法吧。    最开始,我没有在网上找资料的时候,我对于设计寻路算法的看法是遍历整个地图,将障碍物做上标记,然后找一条能够到达目的地的线路就可以了。所以最开始我用了特别暴力的方式来...

Sober_yang的博客 3631

初识Spring~

1.官网 http://spring.io 2.概述 Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。Spring框架的不光是技术牛,而是它的核心思想更牛,它不重复发明轮子,而是"拿来主义",把业界做的最好的技术黏合起来形成一个强大的企业级的应用框架。 Spring 框架是一个分层架构,由7个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如下图所示: 组成 Spring 框架的每个模块(或组件)都可以单独存在..

Rok728的博客 367

CentOS Stream 9中安装MySQL的详细步骤

本文详细介绍了在CentOS Stream 9系统中如何进行MySQL的在线安装、离线安装以及忘记密码的恢复操作。通过阅读本文,您将能够了解并掌握在CentOS Stream 9上安装MySQL的步骤,以及在遇到忘记密码的情况下的解决方案。

小白典的博客 7257

Visual Studio 命令提示符工具区别与使用场景

Visual Studio会提供一系列命令提示符工具,这些工具应用在哪些场景呢?本文进行了相关介绍。

cicada15的博客 3491

Spring--IoC与DI

IoC(Inversion of Control,控制反转)是Spring框架的核心部分,是一个设计模式,它允许将对象的创建和依赖关系的管理从应用程序代码中分离出来,交给外部容器处理。这种模式的核心思想是“控制”的反转,即由传统的由对象自己创建依赖转变为由外部容器在运行时注入依赖。IoC容器是Spring框架中实现IoC概念的核心组件,主要负责实例化、配置和组装应用程序中的对象,并管理它们的生命周期。

qq_33807380的博客 1820

Microsoft Bitlocker企业级管理部署方案

BitLocker是Windows 10以及更高版本中内置的磁盘加密工具,是一种可靠的数据保护机制,可以保护计算机上的敏感数据不被未经授权的人访问。BitLocker的工作原理是将整个系统卷或其他数据卷加密的同时,向某个可信软件或硬件模块请求密钥解密数据。BitLocker最大的好处在于其内置于Windows系统,所以用户无需安装其他软件或购买额外的许可证或硬件设备。本文将介绍Microsoft BitLocker企业级管理部署方案,包括:BitLocker部署前的准备工作。

xueyunshengling的博客 2073

Spring详解—— IOC 和 DI 区别

我们只要提到Spring这个词,有简单了解过Spring的人基本上都会脱口而出IoC、DI和AOP这几个概念。但是对于初学者来说,一下子搞懂IoC和DI的概念还是挺麻烦的。比如之前我自己刚刚学习Spring的时候,只知道IoC能够帮我们创建对象,不再需要我们自己去创建了,并且那时IoC和DI傻傻分不清,对AOP的概念就更加不用说了。所以这次一定要好好理解。IoC(Inversion of Control)的意思是“控制反转”,它是Spring最核心的点,并且贯穿始终。IoC并不是一门技术,而是一种设计思想。

说故事的五公子 1889

Python 爬虫实战:赛事分析平台构建与比赛数据抓取

在体育赛事日益丰富的今天,对比赛数据的收集与分析对于运动员、教练团队以及体育爱好者都具有重要意义。通过构建一个赛事分析平台,我们可以系统地抓取、整理和展示各类比赛数据,为用户提供全面的赛事洞察。本文将深入讲解如何利用 Python 爬虫技术实现这一平台的构建,涵盖从目标网站分析到数据可视化展示的全过程。

u014481728的博客 3179

4、高光图像滤镜显著改善文本图像的光学字符识别

本文介绍了高光图像滤镜在光学字符识别(OCR)中的应用,详细探讨了其技术原理、实现步骤和在多种场景下的效果。通过增强文本图像的边缘和对比度,高光滤镜显著提升了OCR的识别率,尤其适用于扫描文档、手写笔记和低质量图像。实验结果表明,该方法在不同类型的文本图像中均表现出色,并提出了未来优化方向,如深度学习集成和多模态融合,为OCR技术的发展提供了新的可能性。

ooo22的博客 93

Spring框架——IOC、DI

IOC(Inverse of Control)即控制反转,它将对象的创建和依赖注入的过程由程序员手动控制转化为由容器自动创建和注入。DI(Dependency Injection)即依赖注入,它是IOC的一种实现方式,通过容器自动将所需的依赖注入到需要它们的对象中,从而实现对象之间的解耦。IoC和DI是Spring框架的核心概念,它们可以帮助我们管理对象的生命周期和依赖关系。Spring框架提供了强大的IoC容器和DI机制,可以帮助我们更轻松地开发Java应用程序。

WXS153322的博客 2028

基于ADPSS的直驱风电单机模型建模指南:跟网型与构网型

本文介绍了基于ADPSS平台的直驱风电单机建模方法,包含跟网型和构网型两种控制策略。模型采用模块化设计,共享风力机与桨距角控制部分,通过FORTRAN语言实现自定义建模。跟网型采用锁相环同步和矢量控制,构网型则采用虚拟同步机技术模拟同步发电机特性。详细阐述了风力机气动模型、桨距角控制算法及代码实现,为新能源并网仿真提供了实用参考。全文约150字,涵盖模型架构、数学方程和ADPSS实现要点。

huanghm88的专栏 168

Spring 框架学习3 - Spring 中的 ioc 和 di (1)

文章目录Spring 中的IOC 和 DI1. IOC 的概念和作用1.1 什么是 ioc1.1.1 ioc 的概念:1.1.2 ioc 为什么叫控制反转1.1.3 ioc 的作用2. 使用 Spring 的 ioc 解决程序耦合2.1 准备 Spring 的开发包2.2 spring 基于 xml 的 ioc 环境搭建和入门3. ApplicationContext 的三个常用实现类3.1 Fi...

qq_41302594的博客 758

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Spring框架1(Spring简介、Spring中的IOC、Spring中IOC创建对象的方式、Spring中的DI(依赖注入)、Scope作用域)

[1]为什么学习Spring 目前遇到的问题

姓程名序种族猿 226

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Spring中的Ioc、DI到底是啥

我们都知道,Spring是一款轻量级的IOC框架,Spring的核心就是Ioc和DI,并通过俩者解耦。 那么,Ioc、DI呢?Ioc 控制反转Ioc(Inversion of control)控制反转,这里的控制指把控制权从应用程序中剥离出来。ioc它可以把创建对象和查找依赖对象的权限交给Ioc容器控制,而不是传统的由这些对象的使用方(消费者)进行创建初始化操作。IoC是一种让服务消费者不直接依赖

卜可的博客 1万+

Spring框架IOC,DI概念理解

1.什么是框架?  框架是一种重复使用的解决方案,针对某个软件开发的问题提出的。  Spring框架,它是一个大型的包含很多重复使用的某个领域的解决方案。  Spring的理念:不要重复发明轮子。   2.Spring的理解?    首先,Spring是一个容器。它是装对象的。主要就是通过搜索class的路径。找出bean对象,实际就是根据反射来获取这个bean对象的:  

ggabcda的博客 283

Spring框架中的IOC和DI的区别

上次面试被问到IOC和DI的区别时,没怎么在意,昨天又被问到,感觉有点可惜。今晚总算抽点时间,查看了spring官方文档。发现,IoC更像是一种思想,DI是一种行为。为了降低程序的耦合度,利用spring将对象依赖的对象进行注入的过程中,发生了什么呢?发生了控制权的反转。而spring官方文档中,也是将Dependency Injection放在了IoC Container这一章的子节中...

weixin_30782293的博客 130

实际项目中的spring的 DI 和 IOC

前两篇文章讲到了项目用到的消息中心和工作流模块,这篇文章来了解一下怎么样使用模块里面的功能。 spring的核心是DI 和IOC,那到底什么是DI(依赖注入)和IOC(控制反转)呢,依赖在core java里面讲过,依赖是对象之间的关系,A对象依赖B对象,就是说A对象中有关于B对象的引用,比如说我们自己写的类里面需要输入输出,用到了InputStream或者是时间DateFormat,在我们

David_lou的专栏 2206

spring中的IOC和DI的简单理解

在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new object() 这样的语法来将合作对象创建出来,这个合作对象是由自己主动创建出来的,创建合作对象的主动权在自己手上,自己需要哪个合作对象,就主动去创建,创建合作对象的主动权和创建时机是由自己把控的,而这...

PERCENTILE__的博客 273

对Spring中Ioc和DI的简单认识

本周刚开始学Spring框架,接触到了Ioc和DI这两个概念,结合书上和网上的资料简单谈谈自己的认识。 1.什么是IoC Ioc—Inversion of Control,即“控制反转”。IoC是Spring的核心。IoC不是一种技术,而是一种思想。 在传统的模式中,当某个Java对象(调用者)需要调用另一个Java对象(被调用者,依赖对象)时,调用者通常会采用“new 被调用者”的代码方式来创建...

Zlt_blog的博客 306

深入理解spring容器中的控制反转(IOC)和依赖注入(DI)

什么是控制反转(IOC)? “控制”就是指一件事物对另一件事物进行一种管理,而另一件事物处在一件事物的管理之下,这就叫控制。 在面向对象编程的时候,每一个程序的运行都是依赖于很多的对象, 这些对象一起相互协调工作才使得程序得以运行。而在编程早期主流框架还没有出现的时候,这些对象都是我们程序员new出来的。这样子就会出现很多问题,比如耦合度太强,不便于维护;每次运行程序的某个模块的时候可能都会去...

My_name_is_ZwZ的博客 356

Spring IoC和DI

详解Spring IoC和DI。

. 2885

地基Spring框架中的​​IOC 、AOP ​​ 和 ​​DI

spring框架核心:IOC、AOP、DI

qq_37679639的博客 1170

Spring IOC/DI和AOP

一、分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinnianshilongnian.iteye.com/blog/1413846 1.1、IoC是什么   Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Jav...

程序小白进阶之路 6274

【Spring】IoC 和 DI的关系、简单使用,从“硬编码“到“优雅解耦“:IoC与DI的Spring蜕变之旅

在Spring生态中,控制反转(IoC)与依赖注入(DI)如同硬币的两面,共同构建了松耦合的编程范式。本文深度剖析IoC作为设计思想与DI作为实现手段的辩证关系:IoC将对象控制权移交容器,而DI通过构造器、Setter等方式完成依赖传递。通过三个渐进式案例——从基础配置到图书管理系统改造,生动演示了如何用@Component和@Autowired实现组件解耦。你会发现,传统new操作符的硬编码如何被Spring的依赖注入优雅取代,使得代码维护性、扩展性得到质的飞跃。

Code哈哈笑的博客 1361
上一篇: 安装jar包到本地的Maven仓库
下一篇: Spring框架(2) -- Spring中的Bean
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

窝在角落里学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值