【spring框架】(二)控制反转(IOC)容器

时间:2022-05-14 14:23:10

核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。      

IOC:是一种相当优秀的设计思想,即“好莱坞”原则:不用你主动来找我,我会通知你。


1、IOC(inversion of control)

         IoC是一个重要的面向对象编程的法则,用来解决程序的耦合问题,是轻量级的Spring框架的核心。

         IOC是说对象的控制权限进行转移,转移到第三方。

         具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例,使用new 方式,但在IOC容器里,创建被调用者的工作不再由调用者来完成,;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者。

         有了IoC容器,依赖关系就变了,两个对象彼此不再直接联系,它们都依赖IoC容器了,依赖关系由主动依赖变成了被动。

2、IOC容器初始化包含三个步骤:定位、载入解析和注册。

        下图是对IOC容器初始化的图示:
 【spring框架】(二)控制反转(IOC)容器



以下以Spring容器为例进行说明。
定位:对资源文件(Spring的配置文件是:applicationContext.xml)的定位

载入解析:将资源文件载入内存,我们需要解析资源文件中的<bean>。

        配置文件中Bean的结构如下:
 【spring框架】(二)控制反转(IOC)容器


解析分为三步:

        1、对bean的id等属性解析;

        2、对bean中property进行解析,将properties的值取出;

        3、合并1,2的结果,组成一个完整的数据结构--BeanDefinition(这是spring 容器的定义类),在解析<Bean>元素过程中没有创建和实例化Bean对象,只是创建了Bean对象的定义类BeanDefinition,将<Bean>元素中的配置信息设置到BeanDefinition中作为记录,当依赖注入时才使用这些记录信息创建和实例化具体的Bean对象。

        注册:将解析完整的数据结构(BeanDefinition)存放在容器中,不能重复。

        依赖注入:将IOC容器中存放的数据结构(BeanDefinition),实例化被依赖对象,将依赖关系注入到调用对象中。


3、BeanFactory 

        Spring 设计的核心是 org.springframework.beans 包,它的设计目标是与 JavaBean 组件一起使用。这个包通常不是由用户直接使用,而是由服务器将其用作其他多数功能的底层中介。

       下一个*抽象是 BeanFactory 接口,它是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory 是 Spring 作为 IOC 容器的基础。IOC 将处理事情的责任从应用程序代码转移到框架。Spring 框架使用 JavaBean 属性和配置数据,从而可管理对象之间的关系。

        BeanFactory factory = new XMLBeanFactory(new FileInputSteam("mybean.xml"));
        MyBean mybean = (MyBean) factory.getBean("mybean");


BeanFactory 支持两个对象模型。
        单态模型:提供了具有特定名称的对象的共享实例,可以在查询时对其进行检索。Singleton 是默认的也是最常用的对象模型。对于无状态服务对象很理想。
        原型模型:确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时,原型模型最适合。


相关文章