ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

容器初始化主要做的事情

2021-02-14 11:05:25  阅读:172  来源: 互联网

标签:初始化 事情 容器 Spring BeanFactory 接口 Bean BeanDefinition


 

容 器 初 始 化 主 要 做 的 事 情

 

 

 

 

 

 

容器的初始化的主要运行流程如下:

  首先读取注解与xml配置文件,将这些配置文件载入到内存中,在内存中这些配置文件会被当作一个个的Resource对象,

  之后这些对象会被解析成BeanDefinition实例,在最后注册到Spring的容器中

 

 

 

 


 

 

 

首先我们介绍一下Bean与BeanDefinition的关系:

  1.Bean是Spring的一等公民(核心)

    1.1:Bean的本质就是Java对象,只是这个对象的声明周期由容器来管理

    1.2:不需要为了创建Bean而在原来的Java类上添加任何额外的限制(侵入性极低)

      1.3:对Java对象的控制方式体现在配置上(如:注解、xml配置文件)

 

 

  2.BeanDefinition(Bean的定义):根据配置,生成用来描述Bean的BeanDefinition

    常用属性:

      作用范围scope(@Scope) 

      懒加载lazy-init(@Lazy):决定Bean实例是否延迟加载

      首选primary(@Primary) : 设置为true的Bean会是优先的实现类

      factory-bean和factory-method(@Configuration和@Bean)      

 

BeanDefinition关系图:  

 

 

 

 

1.在Spring中大量运用到了模板模式,图中我们可以看到BeanDefinition是一个接口来的。其定义了主要的功能抽象接口。其主要的实现类有图中三个(RootBeanDefinition、GenericBeanDefinition、ChildBeanDefinition)

2.在Spring2.5之前大部分但是使用的RootBeanDefinition实现类,在2.5版本后出现了GenericBeanDefinition实现类,随之该实现类成了主流。

注:

(在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式)

 

 

 

 


 

BeanFactory的介绍

Spring中要求所有的Ioc容器都要实现BeanFactory接口(org.springframework.beans.factory)

BeanFactory是一个顶级的接口,其内部定义了一个String类型的变量,该变量主要用来获取FactoryBean的实例

该变量的使用例子:

 

 

 

 

 

BeanFactory和FactoryBean的区别:

  BeanFactory:

    它是Spring容器的根接口,定义了Bean工厂的最基础的功能特性。是用作Spring中管理Bean的容器。

  FactoryBean:

    它的本质也是一个Bean,但是这个Bean不像Service和Dao一样用来注入使用的,它的作用是用来生成这些普通的Bean的。

    实现了该接口后呢,Spring容器在初始化时,会把实现了这个接口的Bean取出来,然后使用这个Bean中的getObject()方法生成我们想要的Bean。

 

标签:初始化,事情,容器,Spring,BeanFactory,接口,Bean,BeanDefinition
来源: https://www.cnblogs.com/zcl1116/p/14401612.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有