zoukankan      html  css  js  c++  java
  • Spring 的 IOC

    1. 什么是IOC IOC的好处

    IOC的思想是将需要的对象通过外部传入进来,而不是自己创建。这样的设计方式更加灵活。在Spring中对象之间的依赖关系也是由IOC容器来维护(类与类之间的依赖关系,使用与被使用)。

    IOC的设计也是根据设计模式原则中依赖倒置原则。

    IOC 控制反转。通过DI依赖注入可以实现控制反转。IOC与DI的关系如下图所示。

    DL 依赖查找,已经被抛弃。实现思路大概为将service放在map中,然后从map中通过service名字作为key获取指定的service。

    2. Spring 框架中是如何做IOC的

    Spring通过控制反转容器管理bean的生命周期,控制bean的依赖注入。Spring的IOC容器避免在各处使用new来创建类,并且统一维护。在你需要一个实例时,由容器提供给你。

    Spring IOC 容器工作流如下图所示。

    Spring源码分析IOC :

    Spring IOC 核心:依赖注入和自动装配

    核心接口:BeanFactory 和 ApplicationContext

    BeanFactory : 能够管理和装配Bean,获取Bean实例

    BeanDefinition: 用于描述Bean的定义

    BeanDefinitionRegistry: 提供向ioc容器注册BeanDefinition对象的方法(registerBeanDefinition)。注册到BeanDefinitionMap中(key:String的BeanName value:BeanDefinition)。

    ApplicationContext:BeanFactory子接口。面向开发者使用,有更多的功能。继承BeanFactory,也能管理装配Bean。RousorcePatternResolver能够加载资源文件。

    3. Spring 有什么缺点

    Spring像一个胶水,将框架黏在一起,后面拆分的话就不容易拆分了。

    Spring 和Spring MVC的区别

    Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring。Spring 作为胶水 连接Mybatis 和Spring MVC 构成SSM框架。

    早期的SSH框架:Struts2 : Web层框架。Spring : 容器框架。
    Hibernate : 持久层框架。

    4. Spring Bean 的五种作用域

    1. singleton:Spring的默认作用域 容器里拥有唯一实例(针对无状态的Bean)
    2. prototype: 针对每个getBean请求,容器都会创建一个实例(针对有状态的Bean)

    web 容器下
    3. ruquest:会为每一个Http请求创建一个Bean实例
    4. session:会为每个session创建一个Bean实例
    5. globalSession:会为每个全局Http Session创建一个Bean实例,该作用域仅对Portlet有效。

    global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。

    5. Spring Bean 的生命周期

    由Spring容器来管理的,主要是 创建 ,销毁。

    创建:

    1. 实例化Bean
      • BeanFactory 通过createBean 进行实例化一个未初始化的Bean
    2. 设置对象属性(依赖注入)
      • 实例化后的对象被封装在BeanWrapper对象中,并且此时对象仍然是一个原生的状态,并没有进行依赖注入。
      • 紧接着,Spring根据BeanDefinition中的信息进行依赖注入。
      • 并且通过BeanWrapper提供的设置属性的接口完成依赖注入。
    3. 注入Aware接口
      • Spring会检测该对象是否实现了xxxAware接口,并将相关的xxxAware实例注入给bean。aware接口声明了依赖关系
    4. BeanPostProcessor
      • 当经过上述几个步骤后,bean对象已经被正确构造,但如果你想要对象被使用前再进行一些自定义的处理,就可以通过BeanPostProcessor接口实现。
    5. InitializingBean与init-method
      • 当BeanPostProcessor的前置处理完成后就会进入本阶段。

    销毁:

    若实现了DisposableBean接口,则会调用destroy方法

    若配置了destroy-method属性,则会调用其配置的销毁方法

  • 相关阅读:
    牛人的博客,备忘
    dev gridlookupedit
    Oracle with as 用法
    动态加载DLL对接第三方接口
    Oracle执行计划不稳定
    JAVA Cannot find class [×××] for bean with name '××' defined in class path resource [×××] 问题解决方法
    JAVA B/S通过摄像头采集图片信息解决方案。
    使控件悬浮在页面上不随滚动条变化的JQUERY插件
    原生态水平和垂直拉伸的JQUERY插件
    javascript实现继承的类
  • 原文地址:https://www.cnblogs.com/wei57960/p/12623321.html
Copyright © 2011-2022 走看看