Spring-----基础篇

159 阅读4分钟
  1. IOC的理解:即是"控制反转",它不是什么技术,而是一种设计思想。反转是指获得对象的过程反转了,传统的情况下,我们获取所需对象的方法是new一个对象,而IOC则是将获得对象的过程交给容器控制,不再由类控制类的创建,这样做可以使我们系统的耦合度不这么高,我们只需将重心放在如何实现业务逻辑上,而不是在创建对象的过程上。(控制反转分为两种:依赖注入(DI)和依赖查找(DL))
  • 控制”指的是指对对象的创建、维护、销毁等生命周期的控制,这个过程一般是由我们的程序主动去控制的,如使用new关键字去创建一个对象(创建),在使用过程中保持引用(维护),在失去全部引用后由GC去回收对象(销毁)。
  • 反转”是指将指的是指对对象的创建、维护、销毁等生命周期的控制这个过程交由IOC容器控制,需要某个对象的时候就可以直接去IOC容器中获取,可以将工作重心放在业务逻辑中,不需要考虑类之间的依赖关系。
  1. DI的理解:即“依赖注入”,在IOC容器创建Bean的过程中,会将对应的依赖关系同时注入到Bean中,是IOC实现的其中的一种方法,也是最常用的方法。

3.Spring中两个核心的容器

(1)BeanFactory 容器

  • 是IOC容器的核心接口,Spring使用BeanFactory来实例化、配置和管理Bean。(其主要定义了getBean方法,getBean方法是IOC容器获取对象的入口)
  • BeanFactory只能管理单例(Singleton)Bean的生命周期,而不能管理例如原型模式(prototype)的生命周期,以为原型Bean在创建后就传给了客户端,容器失去了对他们的引用。
  • 最常见的实现类是XmlBeanFactory,可以从文件系统或者classpath中获取资源。(注意:通过BeanFactory启动IOC容器时,并不会初始化配置文件中定义的Bean,初始化动作发生在第一个调用前,因为对于单例Bean,BeanFactory户缓存Bean实例,所以第二次使用getBean获取Bean时直接从IOC容器缓存中获取Bean)

(2)ApplicationContext 容器

  • BeanFactory 接口提供了配置框架及基本功能,但是无法支持Spring的aop功能和web功能,而ApplicationContext接口作为BeanFactory的派生,因而提供BeanFactory所有的功能。

  • ApplicationContext还会额外提供以下的功能:

    (1)MessageSource, 提供国际化的消息访问

    (2)资源访问,如URL和文件

    (3)事件传播特性,即支持aop特性

    (4)载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层

  • ApplicationContext:是IOC容器另一个重要接口, 它继承了BeanFactory的基本功能, 同时也继承了容器的高级功能,如:MessageSource(国际化资源接口)、ResourceLoader(资源加载接口)、ApplicationEventPublisher(应用事件发布接口)等。

(3)两者的区别

  1. BeanFactory采用的是延迟加载的形式来注入Bean的,只有在使用到某个Bean的时候才会加载实例化该Bean。而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的Bean,这样,我们就可以在容器启动阶段中就可以发现是否有配置错误的情况,而BeanFactory则不能。通常情况下,我们会选择使用ApplicationContext,我们需要某个Bean的时候可以直接使用,不用创建,因为其已经创建好了。
  2. BeanFactory主要是面对Spring框架内部,而ApplicationContext面对的是Spring使用的开发者。
  3. BeanFactory和ApplicationContext都支持BeanPostProcessor(Spring容器完成Bean的实例化,配置和其他的初始化后添加一些自己的逻辑处理,我们就可以定义一个或者多个BeanPostProcessor接口的实现),不过在BeanFactory中得自行配置,而ApplicationContext已经自动注入了。