一、Spring中IOC的原理及用法(基础理解)

Spring中的IoC的基本概念及实现原理 本篇文章内容基于《Spring 5企业级开发实战》。 1. IoC的概念 1.1依赖倒置原则 1.2依赖注入 2. Spring IoC的实现方式 2.1 XML方式 2.2注解方式 3. Spring IoC实现原理解析 3.1 BeanFactory代码解析 3.2 ApplicationContext代码解析 3.3 BeanDefinition代码解析 3.4 ... 阅读详情

Spring框架的介绍

  1. Spring是分层的java SE/EE应用的full-stack轻量级开源框架。
  2. 它是以IOC控制反转(Inversion Of Control)和AOP面向切面编程(Aspect Oriented Programming)为核心。
  3. 提供了表现层springmvc和持久层Spring JDBC以及业务层的事务管理等企业级应用解决方案
  4. 将开源世界中众多优秀的第三方框架和类库整合。

spring的优点:

● IOC解耦,简化开发

● AOP面向切面编程支持

● 生命式事务支持

● 方便程序测试

● 集成第三方优秀框架

一、IoC的概念

这种将创建对象的权利,由在程序代码中主动new对象的方式,转变为由工厂类创建并且提供给我们,我们使用的时候从容器中去取,变成被动接收的方式,称为控制反转。

IoC本质上就是工厂模式,原来我们是自己主动创建一个对象,主动去获取一个资源。

//Car是接口, 后面是实现类
Car bmw = new Bmw();
Car benZ = new BenZ();
Car audi = new Audi();

 现在使用工厂模式,我们需要的对象由工厂去创建,我们不再自己创建,我们只消费对象。

Car bmw = BeanFactory.getBean("bmw");
Car benZ = BeanFactory.getBean("benZ");
Car audi = BeanFactory.getBean("audi");

(1)使用IOC有什么好处?

  1. 降低类与类之间的耦合度
  2. 我们不再需要自己创建对象,只要使用对象就可以了
  3. 使用Spring框架就是使用工厂模式来创建对象,由Spring容器帮我们管理所有的Java对象

(2)创建容器的三种方式

  1. 类路径配置文件创建容器: ClassPathXmlApplicationContext(“Spring配置文件名字”)
  2. 本地文件绝对路径创建容器(全路径):FileSystemXmlApplicationContext
  3. 纯注解方式创建容器:  AnnotationConfigApplicationContext

二、属性注入

bean标签

bean标签的属性说明

属性说明
id容器中唯一的标识
name还可以有多个名字,逗号、空格、分号隔开
class指定类全名,指定的是实现类,不是接口
scope

指定bean在容器中作用范围  

singleton:默认值,表示这个是单例对象,整个容器中只会创建一个对象

prototype:多例对象,每次获取一个新的对象

request:用于请求域

session:用于会话域

application:用于上下文域

globalsession:用于全局的会话,在分布式开发中

init-method创建对象时,执行的初始化方法
destroy-method销毁对象时,执行的方法
lazy-init是否使用延迟加载,默认是不使用

bean的生命周期

scope属性

bean的作用范围和生命周期的说明

scope取值作用范围生命周期
singleton单例对象

容器一创建就创建这个对象,只要容器不销毁就

一直存在

出生:容器创建就出生

活着:只要容器没有销毁就一直存在

死亡:容器关闭时

prototype多例对象

每次获取对象就创建一个新的对象,使用完毕会

被GC垃圾回收机制回收

出生:获取对象的时候

活着:使用过程中

死亡:由GC回收

(1)依赖注入(Dependency Injection,简称DI )

        1.构造方法注入 applicationContext.xml

<!--
1. 使用构造方法注入
子元素:constructor-arg 构造方法注入
    index:每几个位置,从0开始
    name:指定形参的名字
    type:指定参数的类型
    value:简单类型的值:8种基本类型+String类型
    ref:赋值引用类型,指定对象的id
 -->
<bean class="com.itheima.entity.Customer" id="customer">
    <constructor-arg name="id" value="100"/>
    <constructor-arg name="name" value="白骨精"/>
    <constructor-arg name="male" value="true"/>
    <constructor-arg name="birthday" ref="birthday" type="java.util.Date"/>
</bean>

<!-- 引用类型:现在的时间 -->
<bean class="java.util.Date" id="birthday"/>

        2.set方法注入 applicationContext.xml

<!-- 2.使用set方法注入 -->
<bean class="com.itheima.entity.Customer" id="customer">
    <!-- 属性名:为id value为200 -->
    <property name="id" value="200"/>
    <property name="name" value="猪八戒"/>
    <property name="male" value="true"/>
    <property name="birthday" ref="birthday"/>
</bean>

<!-- 引用类型:现在的时间 -->
<bean class="java.util.Date" id="birthday"/>

        3.p命名空间注入 applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
  
    <!-- 使用p命名空间注入,本质上还是set注入
      1. 导入p命名空间
      2. 简单类型的格式:p:属性名="值"
         引用类型的格式:p:属性名-ref="id"
       -->
    <bean class="com.itheima.entity.Customer" id="customer" p:id="300" p:name="孙悟空" p:male="false" p:birthday-ref="birthday"/>

    <!-- 引用类型:现在的时间 -->
    <bean class="java.util.Date" id="birthday"/>
</beans>
p名称空间描述
p:属性名注入简单类型
p:属性名-ref注入引用类型

(2)集合属性注入

        1.单例集合

  <!-- list类型 -->
    <property name="list">
        <list>
            <value>张飞</value>
            <value>关羽</value>
            <value>刘备</value>
        </list>
    </property>

        2.双例集合

 <!-- map集合,所有的双引集合也是可以通用的 -->
    <property name="map">
        <map>
            <entry key="cn" value="中国"/>
            <entry key="usa" value="美国"/>
            <entry key="jp" value="日本"/>
        </map>
    </property>

        3.属性集合

   <!-- property集合 -->
    <property name="prop">
        <props>
            <prop key="gz">广州</prop>
            <prop key="sh">上海</prop>
            <prop key="bj">北京</prop>
        </props>
    </property>

三、注意

  1. 创建容器时,配置文件中的所有类都会被实例化
  2. 注入的集合数据类型如果不是简单类型,则使用标签<ref>,属性bean
  3. 通过p命名空间注入属性本质上是简化的set注入,需要导入p命名空间
  4. 集合属性注入时,若数据的格式相同,标签可以互用,如<list>与<set>
  5. 集合属性注入不同集合,键值对的书写方式细微差别

Spring IOC原理解读 面试必读 Spring IOC设计原理解析:本文乃学习整理参考而来 一、 什么是Ioc/DI? 二、 Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三、 IoC容器的初始化 1、 XmlBeanFactory(屌丝IOC)的整个流程 2、 FileSystemXmlApplicationContext 的IO 阅读详情

相关推荐

Spring的IOC原理以及思维导图

什么是控制反转(IOC)?

weixin_46064631的博客 1964

Spring IOC介绍及其原理

一、Spring IOC是什么 IOC:控制反转,是一种设计模式。 一层含义是控制权的转移,由传统的在程序中控制依赖转移到由容器来控制。 第二层是依赖注入:将相互依赖的对象分离,在Spring配置文件中描述他们的依赖关系,他们的依赖关系只在使用的时候才建立,简单来说就是不需要的NEW一个对象了。 二、Spring IOC简单原理 实现步骤: 加载并且保存Spring配置文件路径信息,然后保存到configLocation中。 刷新Spring上下文。 创建并且载入DefaultL...

suncat的博客 9078

Spring IOC 高级用法

Scope。

编程神经元的博客 878

Spring学习总结(二):IOC的介绍和原理

一、IOC的介绍 上一篇中介绍了IOC和AOP是Spring的核心。何为IOC?IOC(Inversion Of Control)意为控制反转,它把对象的创建、对象间的调用关系交给Spring来管理,从而达到类间降低耦合度的目的。 IOC有两种方式,DI(Dependecy Injection)和DL(Dependency Lookup)。DI即为依赖注入,也就是我们常说的属性注入,DL则是当前软件实体主动去某个服务注册地查找依赖的哪些服务(使用不多,资料较少)。 ...

weixin_47382783的博客 496

STM32F407 步进电机S形曲线加减速

步进电机

smallerlang的博客 1591

如何把Excel的数据导入python?

Python数据分析——excl导入数据的简单方法(xlrd) 本文的初衷是发现网上很多Excel导入Python都没有结合具体Excel文档进行讲解,所以这篇文档将会呈现一个简单快速的Excel+Python的入门方法。 开发环境 Prerequisites: 在开始用Python导入Excel之前,要配置好自己的开发环境,最好有IDE(terminal也可)+安装相应的数据分析包。 IDE :pycharm,vscode,etc 数据分析包:matplotlib,xlrd,numpy,etc 导入数

qq_40783513的博客 7万+

Spring5学习(一):为什么要使用IOC以及IOC容器底层原理

什么是IOC:控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 使用IOC目的:为了耦合度降低 首先提出一个问题:如果现在有两个类,一个是UserService,一个是UserDao。UserDao中有一个方法add(),我们想在UserService的execute()方法中调用add方法,改如何做? 最简单的方式当然是实例化对象, 具体代码: UserDao.java: class UserDao{ public void add(){ Sys.

m0_49499183的博客 1230

Maxwell中铜导体热损计算的关键步骤与技巧

本文详细介绍了在Maxwell软件中准确计算铜导体热损的关键步骤与实用技巧。重点阐述了如何正确设置涡流场求解器、启用涡流效应、根据工作频率计算并应用肌肤深度以指导网格剖分,以及准确施加激励和定义电流回路。文章还强调了使用温度相关材料属性和进行后处理验证的重要性,旨在帮助工程师获得可靠的热损计算结果,优化产品设计。

weixin_29232121的博客 493

什么是Spring IOC?有什么作用?

IOC的全英文名是:Inversion Of Control ,直译过来就是控制反转,控制反转是把传统上由程序代码直接操控对象(new对象)的调用权交给ioc容器,由容器来实现对象的创建,依赖,销毁,初始化等等。Spring 框架是一个 IOC 容器的实现,DI 依赖注入是它的实现的一个原则,提供依赖查找和依赖注入两种依赖处理,管理着 Bean 的生命周期。Spring 还提供了 AOP 抽象、事件抽象、事件监听机制、SPI 机制、强大的第三方整合、易测试性等其他特性。

lovoo的博客 3664

零信任架构实战:“持续验证+动态授权”全流程解析(附策略引擎联动图)

《零信任实战指南:7图拆解核心流程与行业案例》摘要:本文通过7张架构图系统解析零信任五大核心流程:强身份认证、设备检查、动态授权、持续监控和自动降权。对比金融(重数据审计)与制造业(重物理绑定)的落地差异,指出三大常见误区及解决方案。数据显示,零信任可使安全响应提速60%,泄露成本降低45%。文章提供6个月实施路线图,强调零信任是"智能信任"体系,建议企业分阶段改造,优先保护核心系统。附赠金融/制造行业策略模板及甘特图示例。(149字)

sara_han的博客 773

Miniforge3部署教程,完美替代Anaconda3

大背景不介绍了,哎!直接上教程!

zzy_ucas的博客 1万+

《Spring》IOC实现原理

《Spring》IOC实现原理1. 概述2. 依赖倒置3. 控制反转4. 常用容器4.1 BeanFactory4.2 ApplicationContext5. Bean的作用域6. Bean的生命周期 1. 概述 IOC(Inversion of Control)控制反转,也称为DI(Dependency Injection)依赖注入。所谓IOC ,就是把原先代码里需要开发者实现的对象创建和关系依赖,反转交给SpringIOC容器管理对象的生命周期和对象之间的依赖关系。 Spring通过配置文件描述Be

飞飙的蜗牛 1万+

ESP32天线阵列实现Wi-Fi空间成像与无直视定位

Wi-Fi信道状态信息(CSI)是OFDM系统中表征多径传播特性的基础物理层参数,其复数值包含幅度与相位,可反映无线环境的空间特征。基于CSI的射频感知技术,通过提取子载波级信道响应,结合阵列信号处理,实现到达角(AoA)估计与深度映射,本质是将通信链路重构为空间域传感器。该技术无需专用雷达硬件,具备低成本、被动式、隐私友好等工程优势,在室内定位、行为识别、仓储导航等场景具有广泛落地价值。本文聚焦ESP32平台,详解多芯片相位同步、CSI零拷贝采集、嵌入式MUSIC算法及信道图谱轻量化部署等关键实现。

weixin_30632267的博客 236

Spring中ioc的实现原理

学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。 IOC理解 首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinnianshilongnian.iteye.com/bl

qq_43842093的博客 7192

STM32 bootloader程序跳转到APP卡死在B_ENDP_ALIGN,原因:有未处理的中断。解决方法:重启系统

Bootloader和App中都用到了串口,定时器等,所以从Bootloader跳转App后未卡死。 后来写的另一个App里没有用到这几个外设,然后就是无限的卡死。 现在Bootloader中跳转App之前将已打开的外设关掉,再跳转至App就不再出现卡死。  if(((*(vu32*)(APPLICATION_ADDRESS+4))&0xFF000000)==0x08000000) {

jingzhixingyun的博客 7919

RT-DETR改进策略【卷积层】| CGblock 内容引导网络 利用不同层次信息,提高多类别分类能力 (含二次创新)

本文记录的是利用中的模块优化的目标检测网络模型。通过局部特征提取器、周围环境提取器、联合特征提取器和全局环境提取器来提取局部特征、周围环境和全局环境信息,充分利用不同层次的信息。本文将其应用到中,并进行二次创新,使网络能够更好的处理多类别目标的分类能力。CGNet: A Light-Weight Context Guided Network for Semantic Segmentation1️⃣ 首先通过局部特征提取器floc(∗)floc(*)floc(∗)和周围环境提取器fsur(∗)f_{sur }

Limiiiing的博客 1348

深入理解Spring IOC

我们在最开始学习 Spring 的时候,就接触 IOC 了,IOC是Spring相对比较核心的概念,本文上面五个体系可以说是 Spring IOC 中最核心的部分,只有深入理解了IOC,在我们阅读Spring源码的时候,我们才能够更更加清晰。

小徐的博客 2019

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Spring IOC的实现原理理解

由于对象之间存在了复杂的依赖关系,导致耦合度较高,为了解决这个问题,所以提出了ioc原理 ioc(控制反转)是什么 其实简单来说就是你在创建对象的时候不用自己去new 一个对象,而是有别的给你提供,在spring 中就有ioc容器给你提供对象。 ioc在spring中怎么实现 我个人觉得spring中的ioc实现其实就是加强版的工厂模式,然后它通过加载配置文件来初始化对象。在这里配置文件可以用xml , properties等都可以,但是不同的配置文件类型需要用不同的解析器去解读。 然后 Spring B.

GSY码的博客 1551

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Spring IoC Container 原理解析

Object可以为string 也可以为 class<?也可以为空,为空时基本都是要通过factoryBeanName、factoryMethodName去实例化对象scopeString值:singletonprototype默认为空,为空时就当单例处理]singleton详见@Scope注解;@Scope注解的使用还是有点窍门的,例如@RefreshScope是什么原理?lzyInitBoolean是否延迟加载。

mifffy_java的博客 1284

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring 中Ioc的理解

Spring框架的IOC(控制反转)是其核心特性,通过将对象创建和依赖管理的控制权从业务代码反转给容器,实现代码解耦和简化开发。IOC容器负责加载配置、创建Bean、管理依赖关系和生命周期。依赖注入(DI)是IOC的具体实现方式,包括Setter注入、构造器注入和字段注入三种方式。Bean的生命周期包含加载定义、实例化、属性注入、初始化、就绪和销毁六个阶段。底层通过反射、BeanDefinition和三级缓存等机制实现,能解决单例Bean的循环依赖问题。IOC的优势在于解耦、简化开发、便于测试和统一管理,是

beiguo666的博客 985

透析Spring(一): Spring之IoC容器理解

看懂Spring的IoC容器设计思路,好处,并和DI进行比较等

Java学习之道 4019

Spring面试必备:Spring IOC和AOP的理解、如何解决Spring循环依赖

IOC(Inversion of Control)是 Spring 框架的核心概念,指的是将对象的创建和管理交给 Spring 容器,而不是在应用程序中显式地进行控制。通过 IOC,依赖对象可以通过依赖注入(Dependency Injection, DI)进行传递,简化了对象的创建过程,降低了耦合度。

程序员-杨胡广的博客 2173

Spring是什么?IoC容器的理解

Spring是什么?Ioc容器的理解

HBINen的博客 3773

如何理解Spring中的IOC

此文章可以快速的帮你理解透彻IOC和DI等核心概念。

qq_45821255的博客 1230

Spring IOC深入解析:从原理到实践

Spring框架是一个开源的Java EE框架,它最初由Rod Johnson在2003年创建。Spring框架的核心理念是通过IOC和面向切面编程(AOP)来解决企业应用开发中的复杂性问题。松耦合:通过IOC容器管理对象的创建和依赖关系,使得对象之间的耦合度大大降低。AOP支持:提供面向切面编程的支持,方便实现日志记录、事务管理等功能。声明式事务管理:通过配置文件即可完成事务的管理,无需手动编写事务代码。方便集成。

2403_87729201的博客 1194

Spring实现IOC和AOP的底层原理

Spring框架是Java企业级应用开发中的核心框架之一,其核心思想可以概括为IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。IOC通过依赖注入实现对象之间的解耦,而AOP则提供了一种在不修改源代码的情况下,为程序动态添加额外功能的技术手段。本文将深入探讨Spring实现IOC和AOP的底层原理。Spring的IOC和AOP是实现松耦合、高内聚和代码复用的重要手段。

qq_30009397的博客 2102
上一篇: Session和Cookie有什么区别?
下一篇: 二、Spring中AOP的原理及用法(基础理解)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值