spring Bean创建方法是什么
spring Bean创建方法是什么
本篇内容主要讲解“springBean创建方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springBean创建方法是什么”吧!
bean创建的流程图
写在前面:建议大家一定要自己用实例跑一遍,做好记录。如果只是看看会非常抽象。此流程图作为梗概,便于加强记忆和理解,新手或无基础的有个印象即可。等跟随本文走通一遍,在回过头看这个图,或许会有收获
源码走一遍bean的定义这是我的bean目录结构,只是做一个例子
获取核心容器对象,bean最后都会放在此容器对象中
*ApplicationContext的三个实现类*ClassPathXmlApplicationContext它可以加载类路径下的配置文件,要求必须在类路径下*FileSystemXmlApplicationContext可以加载任意路径下的配置文件,必须有访问权限*AnnotationConfigApplicationContext用于读取注解创建容器的这里我用ClassPathXmlApplicationContext来做演示publicclassMyTest{publicstaticvoidmain(String[]args){ApplicationContextcontext=newClassPathXmlApplicationContext("bean.xml");}}
快速开始
建议用IDEA的debug模式来观察Spring的IOC过程
进入到此类的构造方法中
查看setConfigLocations,就是将配置文件加载到configLocations里去
向下执行,查看refresh()
this.prepareRefresh(): 此方法是准备工作,大家感兴趣可以点进去看一下,可以看到里面是获取时间,获取环境信息的一些设置。
this.obtainFreshBeanFactory(): 这一步是创建beanFactory,并且读取Bean的信息,源码注释中还有写到
//Tellthesubclasstorefreshtheinternalbeanfactory.会告诉子类去刷新内部bean工厂
this.refreshBeanFactory:
*Thisimplementationperformsanactualrefreshofthiscontext'sunderlying*beanfactory,shuttingdownthepreviousbeanfactory(ifany)and*initializingafreshbeanfactoryforthenextphaseofthecontext'slifecycle.这个实现类的方法会刷新容器中的beanFactory,关闭之前存在的并且初始化新的beanFactory
利用this.createBeanFactory() 创建了一个beanFactory,类型为DefaultListableBeanFactory
这个类接着往下走:this.loadBeanDefinitions(beanFactory);
*Loadbeandefinitionsintothegivenbeanfactory,typicallythrough*delegatingtooneormorebeandefinitionreaders.这个方法会将beandefinitionsReader读取到的beandefinitions放入bean工厂,我们以上提出的三种注入方式都会走到这里,将bean信息丢进去
返回上述 refresh()
this.prepareBeanFactory(beanFactory); 设置和忽略一些对象值
this.postProcessBeanFactory(beanFactory); 空方法可自定义扩展
this.invokeBeanFactoryPostProcessors(beanFactory);
*InstantiateandinvokeallregisteredBeanFactoryPostProcessorbeans,*respectingexplicitorderifgiven.*<p>Mustbecalledbeforesingletoninstantiation.实例化所有beanFactory组件
registerBeanPostProcessors(beanFactory);
InstantiateandregisterallBeanPostProcessorbeans,//先注册再调用
initApplicationEventMulticaster(); 观察者模式监听器, 监听组件的相关状态,并决定相关调用方法。
finishBeanFactoryInitialization(beanFactory); 重要!!
*Finishtheinitializationofthiscontext'sbeanfactory,*initializingallremainingsingletonbeans.完成了容器beanfactory的初始化,并且初始化其他的bean单例对象
beanFactory.preInstantiateSingletons(); 实例化方法
此方法最后this.getBean(beanName)
继续
Returnaninstance,whichmaybesharedorindependent,ofthespecifiedbean.注释已经很清楚了,此方法会返回一个实例,就是我们的bean对象
进入到createBean方法中
继续进入![image-20200714221630608](/Users/hjj/Library/Application Support/typora-user-images/image-20200714221630608.png)
继续进入
Instantiatethegivenbeanusingitsdefaultconstructor.这个方法注释说明了实例化对象是用构造器完成的
继续看他如何构造的
ca就是Constructor,从这里我们基本可以看出容器内,bean对象的实例化是利用反射的基本原理,获取类构造器,然后newInstance来实现的
以上就是bean对象实例化的基本过程,下面是实例化完成后的初始化过程
回到这里,实例化完成后
注释说明了在populateBean完成bean的初始化
继续
会看到在此方法里会调用前置和后置处理器来初始化Bean
到此,相信大家对“springBean创建方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是恰卡编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
推荐阅读
-
Spring Security 实战干货:手把手教你实现JWT Token
-
「web安全」Spring Boot eureka xstream 反序列化
-
spring中的特殊注解@RequiredArgsConstructor怎么用
spring中的特殊注解@RequiredArgsConstructor怎么用...
-
SpringBoot+Spring Security无法实现跨域怎么解决
-
Spring Security基于注解的接口角色访问控制怎么实现
-
Spring代理对象导致的获取不到原生对象注解怎么解决
Spring代理对象导致的获取不到原生对象注解怎么解决本文小编为大...
-
解析Spring漏洞及修复的方法
-
Spring和IDEA为什么都不推荐使用@Autowired注解
-
Spring BeanUtils如何忽略空值拷贝
Spring BeanUtils如何忽略空值拷贝这篇文章主要讲解了...
-
Spring中Spring Boot与Spring MVC的核心概念是什么