温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

spring Bean创建方法是什么

发布时间:2022-01-17 14:06:13 来源:亿速云 阅读:131 作者:iii 栏目:开发技术

本篇内容主要讲解“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创建方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI