【Java面试】Spring IOC

一、Spring

   Spring是一个开源的、轻量级的J2EE开发框架,核心思想是IOC实现松耦合,利用AOP将应用的业务逻辑与系统服务分离。


二、Spring IOC

       实现原理:工厂模式 + 反射机制

      把IOC容器的工作模式看做是工厂模式的升华,可以把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言提供的反射机制,根据配置文件中给出的类名生成相应的对象。从实现来看,IOC是把以前在工厂方法里写死的对象生成代码,改变为由配置文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。

     IOC控制反转:就是应用本身不负责所依赖对象的创建和维护,而是由外部容器对依赖对象进行创建和维护,这种对依赖对象的控制权转移到了外部容器,称之为控制反转;

    DI依赖注入:与IOC相应地会出现一个依赖注入的概念,指在应用程序运行期间,由外部容器动态地将依赖对象注入到组件中,一般通过构造函数或setter传递或接口传递

    Spring IOC容器原理:就是spring在启动时,会读取应用程序所提供的Bean配置信息,并在Spring容器中对应生成一份Bean配置注册表,然后根据该注册表实例化Bean,和装配好Bean之间的依赖关系;然后将Bean实例放到Spring容器的Bean缓存池(HashMap实现)中,最终支撑上层应用的运行!

简言之,就是Spring在启动的时候,通过一个配置文件描述Bean和Bean之间的依赖关系,并生成相应的配置注册表,然后利用java语言的反射机制实例化Bean及建立Bean之间的依赖关系

    反射是Java语言的一个特性,它允许程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作


IOC容器初始化过程

    定位Resource资源:由ResourceLoader通过统一的Resource接口完成对Resource外部资源的定位,也即BeanDefinition的资源定位

扫描二维码关注公众号,回复: 1606174 查看本文章

    载入BeanDefinition:由BeanDefinitionReader读取、解析定位的Resource资源,也即将用户定义好的Bean表示成IOC容器的内部数据结构BeanDefinition

    注册:通过BeanDefinitionRegistry接口,向IOC容器注册上一步中载入的BeanDefinition(其实是一个HashMap进行管理的),IOC容器通过HashMap数据结构对BeanDefinition进行维护管理

    依赖注入:是发生在在应用第一次调用getBean(BeanFactory接口的方法)时向容器获取Bean时进行依赖注入的,若某个Bean设置lazyinit属性,则该Bean在容器初始化时就会被依赖注入


Spring容器 - Spring容器分为两类

    BeanFactory:最常用的BeanFactory实现就是XmlBeanFactory类,它根据XML文件中的定义加载beans,该容器从XML文件读取配置元数据并用它去创建一个完全配置的系统或应用

    ApplicationContext应用上下文:基于BeanFactory之上构建,并提供面向应用的服务






猜你喜欢

转载自blog.csdn.net/zorkeaccount/article/details/80503941