Spring

作者: FETE | 来源:发表于2017-10-28 14:38 被阅读0次

    Spring

    1. Spring 是什么?

    Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。

    2. Spring IoC

    1. IoC 是什么

    Ioc 全称是 Inversion of Control 即“控制反转”,一种设计思想。

    Ioc就是由容器来负责控制对象的生命周期和对象间的关系。IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。

    IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

    2. DI 是什么

    DI 全称 Dependency Injection,即“依赖注入”,一种思想。

    DI就是由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。

    3. IoC 和 DI

    IoC和DI由什么关系呢?其实DI是Ioc具体实现的其中一种方式。

    由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin Fowler又给出了一个新的概念:“依赖注入”,相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。

    4. IoC 容器

    IoC 容器是 Spring 框架的核心。容器可以解析XML配置文件,通过java反射机制将对象创建出来,设置它们的依赖关系,并管理它们的整个生命周期从对象创建到销毁。

    Application Context 是 spring 中较高级的容器。它可以加载配置文件中定义的 bean,将所有的 bean 集中在一起,当有请求的时候分配 bean。

    常用的 ApplicationContext 接口实现类:

    • FileSystemXmlApplicationContext:从本地文件系统中加载XML文件,使用该实现类时需要指定配置文件在磁盘中的绝对路径。

    • ClassPathXmlApplicationContext:从 CLASSPATH 环境变量加载XML文件,需指定XML文件的文件名,该实现类会从CLASSPATH中搜索,找到指定的文件。

    • WebXmlApplicationContext:在web应用中使用,该实现类可以加载Servlet响应的XML文件。

    2. Spring bean

    1. Spring bean是什么

    bean 是Spring IoC容器所管理的对象,在容器中被实例化,组装。bean 由XML文件的配置元数据创建。

    2. bean 的xml配置

    bean的基本语法:

    <bean id="对象引用" class="完整类名" scope="对象作用域"></bean>
    

    bean有以下常用属性:

    1. id 和 name

      都可以用来指定对象的引用名称,id和name 可以同时存在,同时存在时id的值不能为空。id或name必须指定其中的一个。

    2. class

      这个属性是必须的,用来指定创建的对象的完整类名。

    3. scope

      指定对象的作用域。有singletonprototyperequestsession 这四个值,默认值是singleton

    4. factory-method

      指定使用静态工厂方式实例化对象时调用的静态工厂方法

    5. factory-bean

      指定使用实例工厂方式实例化对象时使用的实例工厂类

    6. autowiring

      指定bean自动装配的模式。

    7. lazy-init

      指定是否使用延迟加载模式。

    8. initialization

      指定对象初始化时执行构造器后回调的方法名称。

    9. destruction 方法

      指定对象销毁后回调的方法名称。

    4. bean 的作用域

    bean的scope可以指定对象的作用域,有四种取值:

    • singleton:指定对象是单例模式
    • prototype:指定对象是多例模式
    • request:指定对象的作用域在request请求中,在web应用中有效
    • session:指定对象的作用域在session中,在web应用中有效

    5. bean 的生命周期

    bean 的生命周期如图所示:

    Spring bean的生命周期

    生命周期执行的过程如下:

    1. spring对bean进行实例化,默认bean是单例
    2. spring对bean进行依赖注入
    3. 如果bean实现了BeanNameAware接口,spring将bean的id传给setBeanName()方法
    4. 如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory方法,将BeanFactory实例传进来
    5. 如果bean实现了ApplicationContextAware()接口,spring将调用setApplicationContext()方法将应用上下文的引用传入
    6. 如果bean实现了BeanPostProcessor接口,spring将调用它们的postProcessBeforeInitialization接口方法
    7. 如果bean实现了InitializingBean接口,spring将调用它们的afterPropertiesSet接口方法,类似的如果bean使用了init-method属性声明了初始化方法,改方法也会被调用
    8. 如果bean实现了BeanPostProcessor接口,spring将调用它们的postProcessAfterInitialization接口方法
    9. 此时bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用上下文被销毁
    10. 若bean实现了DisposableBean接口,spring将调用它的distroy()接口方法。同样的,如果bean使用了destroy-method属性声明了销毁方法,则该方法被调用。

    bean的生命周期在singleton和prototype下的不同

    //TODO

    6. bean 的后置处理器

    7. bean 的定义继承

    3. bean 的实例化

    1. 使用无参构造器

    2. 使用静态工厂方法

    3. 使用实例工厂方法

    8. bean 的自动装配

    相关文章

      网友评论

          本文标题:Spring

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