千家信息网

spring Bean创建方法是什么

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容主要讲解"spring Bean创建方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"spring Bean创建方法是什么"吧!bean创建
千家信息网最后更新 2025年11月07日spring Bean创建方法是什么

本篇内容主要讲解"spring Bean创建方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"spring Bean创建方法是什么"吧!

bean创建的流程图

写在前面:建议大家一定要自己用实例跑一遍,做好记录。如果只是看看会非常抽象。此流程图作为梗概,便于加强记忆和理解,新手或无基础的有个印象即可。等跟随本文走通一遍,在回过头看这个图,或许会有收获

源码走一遍bean的定义这是我的bean目录结构,只是做一个例子

获取核心容器对象,bean最后都会放在此容器对象中

    *   ApplicationContext的三个实现类    *   ClassPathXmlApplicationContext  它可以加载类路径下的配置文件,要求必须在类路径下    *   FileSystemXmlApplicationContext  可以加载任意路径下的配置文件,必须有访问权限    *   AnnotationConfigApplicationContext 用于读取注解创建容器的        这里我用ClassPathXmlApplicationContext来做演示       public class MyTest {    public static void main(String[] args) {        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");    }}

快速开始

建议用IDEA的debug模式来观察Spring的IOC过程

进入到此类的构造方法中

查看setConfigLocations,就是将配置文件加载到configLocations里去

向下执行,查看refresh()

this.prepareRefresh(): 此方法是准备工作,大家感兴趣可以点进去看一下,可以看到里面是获取时间,获取环境信息的一些设置。

this.obtainFreshBeanFactory(): 这一步是创建beanFactory,并且读取Bean的信息,源码注释中还有写到

// Tell the subclass to refresh the internal bean factory.会告诉子类去刷新内部bean工厂

this.refreshBeanFactory:

        * This implementation performs an actual refresh of this context's underlying         * bean factory, shutting down the previous bean factory (if any) and         * initializing a fresh bean factory for the next phase of the context's lifecycle.                  这个实现类的方法会刷新容器中的beanFactory,关闭之前存在的并且初始化新的beanFactory

利用this.createBeanFactory() 创建了一个beanFactory,类型为DefaultListableBeanFactory

这个类接着往下走:this.loadBeanDefinitions(beanFactory);

      * Load bean definitions into the given bean factory, typically through         * delegating to one or more bean definition readers.                  这个方法会将beandefinitionsReader读取到的bean definitions放入bean工厂,我们以上提出的三种         注入方式都会走到这里,将bean信息丢进去

返回上述 refresh()

this.prepareBeanFactory(beanFactory); 设置和忽略一些对象值

this.postProcessBeanFactory(beanFactory); 空方法可自定义扩展

this.invokeBeanFactoryPostProcessors(beanFactory);

        * Instantiate and invoke all registered BeanFactoryPostProcessor beans,         * respecting explicit order if given.         * 

Must be called before singleton instantiation. 实例化所有beanFactory组件

registerBeanPostProcessors(beanFactory);

Instantiate and register all BeanPostProcessor beans,  //先注册再调用

initApplicationEventMulticaster(); 观察者模式监听器, 监听组件的相关状态,并决定相关调用方法。

finishBeanFactoryInitialization(beanFactory); 重要!!

         * Finish the initialization of this context's bean factory,         * initializing all remaining singleton beans.                  完成了容器bean factory的初始化,并且初始化其他的bean单例对象

beanFactory.preInstantiateSingletons(); 实例化方法

此方法最后this.getBean(beanName)

继续

Return an instance, which may be shared or independent, of the specified bean.注释已经很清楚了,此方法会返回一个实例,就是我们的bean对象

进入到createBean方法中

继续进入![image-20200714221630608](/Users/hjj/Library/Application Support/typora-user-images/image-20200714221630608.png)

继续进入

Instantiate the given bean using its default constructor.这个方法注释说明了实例化对象是用构造器完成的

继续看他如何构造的

ca 就是Constructor,从这里我们基本可以看出容器内,bean对象的实例化是利用反射的基本原理,获取类构造器,然后newInstance来实现的

以上就是bean对象实例化的基本过程,下面是实例化完成后的初始化过程

回到这里,实例化完成后

注释说明了在populateBean完成bean的初始化

继续

会看到在此方法里会调用前置和后置处理器来初始化Bean

到此,相信大家对"spring Bean创建方法是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

方法 实例 对象 容器 就是 此方法 注释 信息 文件 路径 过程 配置 兴趣 内容 只是 工厂 建议 明了 模式 流程 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全防护专业人才要求 面试官问你网络安全是怎么做的 软件开发培训学校眼 计算机的网络安全连接 搞嵌入式软件开发会英语 软件开发有哪些行业 违反网络安全第三十条是什么 恒生科技指数恒生互联网指数 数字媒体与软件开发有关系吗 数据库应用技术高佳琴源代码 sql数据库的命名规则 设置窗体标题数据库 惠普服务器raid驱动 分析型数据库非关系型数据库 centos搭建数据库 北京京成顺赢互联网科技有限公司 广州巡检软件开发价位 厦门小蚜虫量软件开发有限公司 服务器安全性与品牌 高拍仪直接传送到服务器 海思嵌入式软件开发机考 软件开发工作好不好找 商丘跑腿app软件开发多少钱 coc数据库查询 立德串口服务器 web页如何实时监测数据库变化 甘肃卫星授时数显钟服务器 服务器主板一定要插服务器内存吗 自反性数据库 mysql数据库迁移
0