美文网首页
spring应用上下文的理解

spring应用上下文的理解

作者: cmeizu | 来源:发表于2018-12-15 17:44 被阅读0次

    #容器

    什么叫容器呢?

    如果你想要一个手机,好这时候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

    相关文章

      网友评论

          本文标题:spring应用上下文的理解

          本文链接:https://www.haomeiwen.com/subject/snyahqtx.html