测试同学上手Spring 之IoC深入解析

想要理解Spring,测试必须要掌握的同学两个知识点就是IoC和AOP,在这里我首先带大家了解一下什么是上手深入IoC。为大家上手Sping编码做好前期最充分的解析知识储备,做到有的测试放矢!
Spring Hello World 回顾
在Hello Spring实例中我们定义了类
public class HelloSpring { private String name="hello"; HelloSpring(){ System.out.println("Hello Spring"); } public String getName() { return this.name ; } public void setName(String name) { this.name = name; } }配置文件中的配置信息如下:
调用HelloSpring中的getName方法代码如下:
public static void main(String[] args) { ApplicationContextcontext = new ClassPathXmlApplicationContext("beans1.xml"); HelloSpringhello = (HelloSpring) context.getBean("hellospring"); System.out.println(hello.getName()); } }运行结果如下:
Hello Spring //构造函数中输出的值 Hello //getName方法中输出的值详细可以参考文章 测试同学从0到1上手Spring
IOC解读
我们可以看到spring并没有new 实例的过程,但是同学完成了实例化的操作,并成功地调用了getName方法。上手深入这就是解析Spring中的控制反转技术(IoC)。
Spring通过一种称作控制反转(Inversion of Control —IoC)的测试技术促进了松耦合。当应用了IoC,同学一个对象依赖的上手深入其它对象会通过被动的方式传递进来,而不是解析这个对象自己创建或者查找依赖对象。也就是测试说Spring控制了对象的生成,应用程序不再需要主动创建对象了!
我们通常说的b2b供应网同学SpringIoC,实际上是上手深入指Spring框架提供的IoC容器实现(IoC Container)。
Spring 的 IoC 容器中发生的事情其实也很简单,总结下来即两个阶段:
采摘和收集“咖啡豆”(bean)
研磨和烹饪咖啡
第一个阶段可以认为是构建和收集 bean 定义的阶段,在这个阶段中,我们可以通过 XML 或者 Java 代码的方式定义一些 bean,然后通过手动组装或者让容器基于某些机制自动扫描的形式,将这些 bean 定义收集到 IoC 容器中。我们通常通过在xml文件中定义bean,然后容器再将这些bean收集到IoC容器中。当第一阶段工作完成后,我们可以先暂且认为 IoC 容器中充斥着一个个独立的 bean,它们之间没有任何关系。但实际上,它们之间是有依赖关系的,所以,IoC容器在第二阶段要干的事情就是分析这些器已经在 IoC 容器之中的 bean,然后根据它们之间的依赖关系先后组装它们。源码库如果 IoC 容发现某个 bean 依赖另一个 bean,它就会将这另一个 bean 注入给依赖它的那个 bean,直到所有 bean 的依赖都注入完成,所有 bean 都“整装待发”,整个 IoC 容器的工作即算完成。
IOC基本运行流程如下图所示:

Spring 启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表,然后根据这张注册表实例化Bean,装配好Bean之间的依赖关系,为上层应用提供准备就绪的运行环境。
IOC深入理解
IoC容器
实现了IoC思想的容器就是IoC容器。IoC容器功能包括:实例化、初始化组件、装配组件依赖关系、负责组件生命周期管理。
IoC容器特点
无需主动new对象;而是描述对象应该如何被创建即可。IoC容器帮你创建,即被动实例化;
不需要主动装配对象之间的依赖关系,而是描述需要哪个服务(组件),IoC容器会帮你装配(即负责将它们关联在一起),被动接受装配;
IoC是免费源码下载一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则。
理解IoC容器问题关键:控制的哪些方面被反转了?
1、谁控制谁?为什么叫反转? IoC容器控制,而以前是应用程序控制,所以叫反转
2、控制什么?控制应用程序所需要的资源(对象、文件……)
3、为什么控制?解耦组件之间的关系
4、控制的哪些方面被反转了?程序的控制权发生了反转:从应用程序转移到了IoC容器。
使用IoC容器开发需要改变的思路
1、应用程序不主动创建对象,但要描述创建它们的方式。
2、在应用程序代码中不直接进行服务的装配,但要配置文件中描述哪一个组件需要哪一项服务。容器负责将这些装配在一起。
最通俗的解释
所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。
相关文章
i33220处理器在2016年的性能评估(i33220的性能表现及其适用领域)
摘要:在2016年,i33220处理器作为英特尔第三代酷睿系列的一员,备受关注。本文将评估i33220处理器在2016年的性能表现,并探讨其适用领域。1.处理器基本介绍...2025-11-05笔记本电脑不断重启的解决方法(遭遇笔记本电脑频繁重启?别担心,这里有解决方案!)
摘要:随着现代生活中对电脑的依赖日益增加,笔记本电脑成为了我们生活中必不可少的工具。然而,当我们使用笔记本电脑时,有时会遇到电脑频繁重启的问题,给我们的工作和娱乐带来了很大的困扰。如何解...2025-11-05使用PE系统安装Win7系统的教程(详细步骤让你轻松安装Win7系统)
摘要:在安装操作系统时,使用PE系统可以提供更多的灵活性和可操作性。本文将详细介绍如何使用PE系统来安装Win7系统,帮助读者轻松完成系统安装。准备工作1.确保计算机中有一个...2025-11-05以5000元主机为主题,了解性能与性价比之间的平衡点(挑选适合自己需求的5000元主机,提升使用体验)
摘要:在现代社会,电脑已经成为我们日常生活中不可或缺的工具之一。而选择一款性能卓越、价格实惠的主机,对于提升我们的使用体验至关重要。在这篇文章中,我们将聚焦于5000元主机,探讨如何在有...2025-11-05华硕N45笔记本拆机教程(学会拆解N45笔记本的关键步骤和技巧,让你信心满满!)
摘要:华硕N45笔记本作为一款高性能、高品质的产品,备受用户喜爱。但是,在使用过程中,由于各种原因,有时候我们需要自行拆卸笔记本,进行清洁、维修或者升级硬件。本文将为大家提供华硕N45笔...2025-11-05大白菜系统装系统教程win7版(详解如何使用大白菜系统轻松安装win7系统)
摘要:随着电脑使用的普及,操作系统的安装成为每个用户不可忽视的重要步骤。本文将以大白菜系统为例,详细介绍如何使用该系统来安装win7系统,并附上相应的教程和注意事项,帮助读者轻松完成系统...2025-11-05

最新评论