zoukankan      html  css  js  c++  java
  • Spring——IoC容器

    IoC容器

    1.1  IoC概述

      Ioc(Inverse of Control,控制反转)是Spring容器的内核。对于软件来说,即某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定,即由Spring容器借由Bean配置来进行控制。也被称作DI(Dependency Injection,依赖注入),即让调用类对某一接口的实现类的依赖关系由第三方(容器或协调类)注入,可以移除类之间的依赖关系。

    1.2 IoC的类型

      从注入方法上看,IoC主要划分为3种类型:构造函数注入、属性注入和接口注入。Spring支持构造函数注入和属性注入。

      1、构造函数注入:

        通过调用类的构造函数,将接口实现类通过构造函数变量传入。

      2、属性注入:

        可以有选择的通过Setter方法完成调用类所需依赖的注入。

    ------

      Spring就是一个第三方容器,它帮助完成类的初始化和装配工作,通过配置文件或注解描述类和类之间的关系,自动完成类的初始化和依赖注入工作,是使用Java中的反射实现的。

    1.3 BeanFactory和ApplicationContext

      Spring通过配置文件描述Bean及Bean之间的依赖关系,利用Java的反射机制实例化Bean并建立Bean之间的依赖关系。Spring的IoC容器在完成这些底层工作的基础上,还提供了Bean实例缓存、生命周期管理、Bean实例代理、事件发布、资源装载等高级服务。

      Bean工厂(BeanFactory)是Spring框架最核心的接口,它提供了高级IoC的配置机制,BeanFacotry是一个类工厂,和传统类工厂不同,传统类工厂只负责构造一个或者几个类的实例;而BeanFacotry是类的通用工厂,它可以创建并管理各种类的对象。Spring称这些被创建和管理的Java对象为Bean。

      应用上下文(ApplicationContext)建立在BeanFactory基础值上,提供了更多面向应用的功能。

      一般称BeanFactory为IoC容器,称ApplicationContext为应用上下文。

      对于两者,可以简单进行划分:BeanFactory是Spring框架的基础设施,面向Spring本身;ApplicationContext面向使用Spring框架的开发者。

    1.4 Bean的生命周期

      

     

    1.5 Spring容器高层视图

      Spring启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表,然后根据注册表实例化Bean,装配好Bean之间的依赖关系。

      Bean的配置信息由:Bean的实现类、Bean的属性信息(如数据源的连接数、用户名、密码等)、Bean的依赖关系(根据依赖关系完成Bean之间的装配)、Bean的行为配置(生命周期等)。

      

     1.6 Bean作用域

      在配置文件中定义Bean时,还可以定义Bean的作用域,作用域将对Bean的生命周期和创建方式产生影响。使用scope属性设置

        单例模式:singleton作用域

          一般情况,无状态或者状态不可变的类适合使用单例模式。在传统开发中,由于DAO类持有Connection这个非线程安全的变量,因此往往未采用单例模式。而在Spring环境下,对于所有的DAO类都可使用单例模式,因为Spring利用AOP和LocalThread功能,对非线程安全的变量进行了处理,使这些非线程安全的类变成了线程安全的类。在实际应用中,大部分Bean都能以单实例的方式运行。这也是Spring将Bean的默认作用域定为singleton的原因。

          默认情况下,Spring的ApplicationContext容器在启动时自动实例化所有singleton的Bean并缓存与容器中。好处有两个:1、对Bean提前实例化会及早发现一些潜在的配置问题;2、Bean以缓存的方式保存,当运行时用到时就无须再实例化,提高运行效率。如果不希望在启动时实例化Bean 在Bean配置中添加lazy-init="true"属性控制即可。(如果该Bean被其他需要提前实例化的Bean引用,那么Spring会忽略这个设置)。

        prototype作用域

          该类Bean当每次调用getBean("id")时返回的也是一个新实例,相当于new一个新对象。   

          默认情况下,Spring容器在启动时不实例化该类型的Bean,此外,Spring容器在讲prototype的Bean交给调用者后,就不再管理它的生命周期。

        与Web应用环境有关的Bean作用域

          需要进行额外的配置

       

        Bean的配置方式:

      

      适用场景:

  • 相关阅读:
    深入理解Linux修改hostname
    Linux开发环境必备十大开发工具
    管理员必备的几个Linux系统监控工具
    Solaris&&QNX® Neutrino®&&OpenVMS&&FreeBSD&&AIX
    ansible来了
    Cobbler系统安装备用链接
    Web安全
    在Eclipse/STS中使用EclEmma进行覆盖率检查
    C#中使用扩展方法
    Winform中Textbox的使用
  • 原文地址:https://www.cnblogs.com/ELAIRS/p/12179770.html
Copyright © 2011-2022 走看看