文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

spring Bean创建方法是什么

2023-06-26 06:15

关注

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

bean创建的流程图

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

spring Bean创建方法是什么

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

spring 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过程

spring Bean创建方法是什么

进入到此类的构造方法中

spring Bean创建方法是什么

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

spring Bean创建方法是什么

向下执行,查看refresh()

spring Bean创建方法是什么

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

spring Bean创建方法是什么

利用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. * <p>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)

继续

spring Bean创建方法是什么

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

spring Bean创建方法是什么

进入到createBean方法中

spring Bean创建方法是什么

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

继续进入

spring Bean创建方法是什么

spring Bean创建方法是什么

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

继续看他如何构造的

spring Bean创建方法是什么

spring Bean创建方法是什么

spring Bean创建方法是什么

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

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

回到这里,实例化完成后

spring Bean创建方法是什么

spring Bean创建方法是什么

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

继续

spring Bean创建方法是什么

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

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯