1、什么是IoC和DI
谈到IoC,开发人员首先想到的一定是Spring IoC,因为用的人实在是太多了,不过今天要讲一下IoC——Inversion of Control,顾名思义就是“控制反转”的意思,是一种思想,不严谨地说也是一种模式,而Spring IoC其实只是IoC的一种具体实现,在Java开发中,IoC意味着将你设计好的对象交给容器控制,而不是传统地在你的对象内部直接控制(包括new创建,工厂创建等等)。
理解了IoC,让我们再分析一下另外一个概念,DI——Dependency Injection,即“依赖注入”,这也是我们经常会提到的概念,为什么提到IoC就一直要提到DI呢,它们是什么关系呢?下面我们先来说说IoC的作用,我们知道在Java开发中我们传统的、最基本的创建对象的方式是用new创建对象,这是一种主动的方式,即调用者需要一个类的实例,就会主动new一个出来,而IoC是依靠容器利用反射创建和查找依赖对象,并将依赖对象注入给调用者的,这也就产生了“依赖注入”这个概念,DI正是IoC最有威力的一部分。因为在一个类内部用new主要创建实例,就会导致类与类之间高耦合,而IoC则解决了这样的问题,便于测试和功能复用,更使得程序的整个体系结构变得非常灵活。
所以可以这么说IoC的核心是DI,而DI最大的优点就是松散耦合,调用者知道太多依赖对象的内容会导致紧密耦合代码,知道越少耦合就越松散,实现松散耦合正是IoC的核心所在。讲完了IoC,让我们看看Spring是如何实现IoC的呢?下面我们就详细了解Spring IoC的整体架构:
2、Spring IoC的架构:
Spring IoC容器主要有两种实现:org.springframework.beans.factory.BeanFactory(Bean工厂)和
org.springframework.contextApplicationContext(应用上下文),其中BeanFactory是Spring IoC最核心的部分,它实现了IoC的基本功能,ApplicationContext接口扩展了BeanFactory,还提供了与Spring AOP集成、国际化处理、资源访问、事件传播以及提供不同层次的context实现,简单地说,ApplicationContext 就是增加了更多支持企业级功能支持,所以现在一般情况下很少用BeanFactory,而是用ApplicationContext了。
我们可以利用Eclipse看一下BeanFactory和ApplicationContext的继承结构:
BeanFactory一共有3个子接口1个实现类,其中实现类SimpleJndiBeanFactory主要是jndi相关的。我们可以从图上的红框看到ApplicationContext其实是HierarchicalBeanFactory接口和ListableBeanFactory接口两个接口的子接口,ListableBeanFactory接口表示这些Bean是可列表的,而HierarchicalBeanFactory表示的是这些Bean是有继承关系的,也就是每个Bean有可能有父Bean。
下面我们再看一下ApplicationContext的向下继承体系结构,红框部分是我们开发中经常会用到的实现:
3、BeanFactory和ApplicationContext的联系和区别
了解了Spring IoC容器的主要架构,对于架构的详细分析我们以后再讲,先来说一下BeanFactory和ApplicationContext的联系和区别:
1、BeanFactory是Spring框架最核心的接口,它提供了高级IoC的配置机制,ApplicationContext建立在BeanFactory的基础之上,提供了更多面向应用的功能,例如提供了国际化支持和框架实践体系,更易于创建实际应用。
2、BeanFactory的实现不能直接使用Resource,而是需要通过IO读取后再调用(例如用BeanDefinitionReader读取),而ApplicationContext的实现已经提供了一系列加载不同Resource的读取器实现,可以直接使用Resource。
3、关于单实例Bean是如何被载入的:BeanFactory延迟载入所有的Bean,直到getBean()方法被调用时Bean才被创建;ApplicationContext则会在上下文启动后预加载所有的单实例Bean。通过预载入单实例Bean,确保当你需要的时候它们已经准备好了,你的应用不需要等待它们被创建。
- 大小: 63.9 KB
- 大小: 138.7 KB
分享到:
相关推荐
这是spring_ioc部分的内容。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
spring ioc以及事物架构图
Spring IoC源码深度剖析开源架构源码2021.pdf
本课程通过UML结合源码进行全局的剖析了Spring_IOC容器的核心原理,以及插件的开发方法,以及插件实例(介绍SpingBoot和Spring定时器扩展原理)。通过本课程的学习您将对Spring_IOC整体架构有清晰的了解,知道5大核心...
Spring IoC容器实现的结构分析
什么是spring,spring核心,spring优点,spring体系结构, 入门案例,DI基础,核心API,文档内附代码
Spring IoC应用开源架构源码2021.pdf
Spring框架系列(6) - Spring IOC实现原理详解之IOC体系结构设计.doc
该教程详细介绍了spring的构架结构,ioc/di思想的转变过程。是一本不可多得的spring入门教程。
Spring架构和IOCSpring架构
使用spring的Ioc容器组装各种组件总结
SpringIOC Spring 框架是一个流行J2EE的开源产品,它提供了统一的应用架构方式、大量的中间层功能模块,大大简化了传统J2EE的开发模式。它的核心代码均来自于真实的项目,是由Spring 之父Rod Johnson 从商业项目开发...
本书在开篇之前对Spring的设计理念和整体架构进行了全面的介绍,能让读者从宏观上厘清Spring各个功能模块之间的关系;一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分...
Spring IOC的快速入门案例 >下载Spring的开发包 https://repo.spring.io/libs-release-local/org/springframework/spring/ 目录结构: docs : API文档和开发规范 libs : 开发需要的jar包、源代码和文档 schema : ...
2、SpringIOC体系结构 3、源码分析-IOC容器的初始化 4、源码分析-IOC容器的依赖注入 5、源码分析-IOC容器的高级特性 三阶段 Spring AOP的涉及原理及具体实践 SpringJDBC的涉及原理及二次开发 SpringMVC框架设计原理...
Spring技术内幕:深入解析Spring架构与设计原理(第2部分) 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自执笔!Java开发者社区和Spring...
本书在开篇之前对Spring的设计理念和整体架构进行了全面的介绍,能让读者从宏观上厘清Spring各个功能模块之间的关系;第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二...
├─11.25 手写spring ioc模块及ioc源码阅读-1.mp4 ├─11.25 手写spring ioc模块及ioc源码阅读-2.mp4 ├─11.25 手写spring ioc模块及ioc源码阅读-3.mp4 ├─11.27 手写Spring ioc和动态代理模式及AO
Spring是一个轻量级Java开发框架(最早由Rod Johnson创建),为Java应用程序提供全面的基础架构支持。 Spring最根本的使命是解决企业级应用开发的复杂性,简化Java开发。 2. Spring两个核心特性 ① IoC(Inverse of ...
主要介绍了使用spring的IOC解决程序耦合的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧