#容器
什么叫容器呢?
如果你想要一个手机,好这时候spring就给你一个手机.你想要使用的对象,spring就会给你,但是现在我们就会问那spring给的对象来自于哪里呢?
spring要负责的工作很多,那么多对象的创建管理都是它在负责,那肯定会有一个地方是负责造对象的.造手机的叫工厂,而spring造对象的不叫所谓的工厂,如果叫工厂有点low,所以给出一个高大尚的名称--容器.所以现在对容器这个概念有一个新的认识了吧.
容器是spring框架实现的功能的核心.(spring的核心是容器,这没有错,但是容器并不唯一,框架本身提供了多个容器的实现,具体的后面会讲).因为没有对象,你无法实现你想要的任何功能.
如果认为造对象是容器的全部功能那你就大错特错了,因为它比你想象的要强得多,它负责对象整个的生命周期的管理包括:创建,装配,销毁.
#IOC容器
容器中经常会用到一个术语就是IOC容器.全称:Inversion of Control.这是一种设计思想
怎么理解IOC呢?
在java开发中,将自己设计好的对象交给容器控制,而非在对象的内部控制.
那么问题来了,是谁控制谁呢?控制的是什么?为何是反转而不是正转,左转,右转啥的?哪些东西发生了反转?这都是问题
##第一个问题:
之前我们所学的对象是这样生成的:我们在对象的内部直接new来创建对象,是通过程序去主动创建对象.而IOC就不一样了,它有一个专门的容器来创建对象,通俗的讲就是它想创建什么对象,它说了算.
而现在谁控制谁这个问题当然就简单了,当然就是IOC控制对象.
##第二个问题:
控制的是什么呢?当然是外部资源一获取咯!(外部资源是一个广泛的定义:不只是对象,如文件啊,图片啊什么的这些)
##第三个问题:
为什么要中反转呢?只是Inversion的翻译吗?当然不是的.
在以前的设计中,由我们自己在对象中主动控制去直接获取依赖对象,也就是正转.而反转呢则是由容器来完成创建及注入依赖对象;因为这是一个被动的过程,我们并没有要求它(容器)这么做.而对象只是被动的接受依赖对象.
##第三个问题:
哪些东西发生了反转?
依赖对象获到被反转了.
所以汇成一句话就是:我们的应用程里不用再过对象的创建和管理对象之间的依赖关系了,这些都让IOC容器代劳吧.我们把对象的创建,管理的控制权都交给spring容器,这就是一种控制权的反转,至此我们就知道了为什么spring容器称之为IOC容器.
●谁依赖于谁:当然是应用程序依赖于IoC容器;
●为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;
●谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;
●注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。
我们可以说spring容器是IOC容器,而不能说IOC容器就是spring容器.
基于IOC容器的框架还有很多.
好了现在理解spring这个概念之后,你也不能做什么,光有这个容器你也造出不对象对吧!
要容器造什么对象是由我们自己决定的,决定对象间依赖关系的也是我们自己,容器只是提供管理对象的空间而已.那么问题就出现了,我们怎么向容器中放入我们需要的对象呢?
这就讲到我们要讲的重点了.应用上下文
#什么是应用上下文呢?
重点话语来了哦!重点,重点,重点.说了好多遍了.
将你需spring帮你管理的对象放入容器的一种对象.可以理解为spring容器抽象的一种实现.
ApplicationContext是一维护Bean定义以及对象之间协作关第的高级接口.
## spring中容器的实现大概分为两种:
1.本身不常用的BeanFactory,这是最简单的容器,只能提供基本的DI功能.
2.就是继承了BeanFactory后派生而来的应用上下文.其抽象接口也就是ApplicationContext.他就能提供更多企业级的服务.如解析配置文本信息.
有了上下文我们就能向容器注册需要spring管理的对象了.对于上下文抽象接口,spring也为我们提供了多种类型的容器实现,供我们在不同的应用场景选择.
① AnnotationConfigApplicationContext:从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式;
② ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式;
③ FileSystemXmlApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件;
④ AnnotationConfigWebApplicationContext:专门为web应用准备的,适用于注解方式;
⑤ XmlWebApplicationContext:从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式。
这算是读后笔记吧:来源于:https://www.cnblogs.com/chenbenbuyi/p/8166304.html
网友评论