spring 生命周期
2022-07-19 22:53:54 0 举报
spring源码
作者其他创作
大纲/内容
Constructor constructor=类对象Class.getConstructor();Object object=constructor.newInstance();
设置Aware接口属性值
在创建过程中需要动态的改变BeanDefinition的信息怎么办?
加载xml
spring
BeanFactory和Factory的区别?共同点:都是用来创建对象的区别:BeanFactory需要遵循完整的创建过程,这个过程由spring管理控制,而FactoryBean只需要通过调用getObject方法就可以返回具体的对象,整个对象的创建过程由用户自己控制相对灵活。
spring bean
对象的属性值都是默认值
放入IOC容器
java中创建对象包含两部分实例化和初始化
AOP
IOC容器
DI 依赖注入(手段)
bean的生命周期
接口
存放BeanDefinition
session
执行初始化方法
我们自定义的bean
BeanFactoryPostProcessor
完整Bean对象
singletion
初始化
properties
如果我们需要在bean对象创建的过程中,详细了解每一步骤 完成的进度,我们应该怎么做,在不同的处理阶段完成不同的处理工作,应该怎么做?观察者模式:监听器 ,监听事件
解析xml
spring cloud
Map
spring 是框架 是生态
BeanPostProcessor
反射
ApplicationContext context= new ClassPathXmlApplicationContext(\"applicationContext.xml\");XXX xxx =context.getBean(xxx.class);xxx.method();
总结Bean生成的整个生命周期:1.spring 通过定义BeanDefinitionReader 接口读取不同形式的bean的信息,如xml、properties、yml、json ,形成Bean的定义信息BeanDefinition对象。2.BeanDefiniton对象通过一些列的BeanFactoryPostProcessor(后置postProcessBeanFactory方法)对BeanDefinition信息进行增强处理,譬如替换掉${配置信息}。3.将增强后的BeanDefinition对象交给BeanFactory工厂通过反射进行实例化:实例化又分为给对象分配堆内存、设置Aware接口属性值、执行bean的前置增强 BeanPostProcessor->postProcessBeforeInitialization 方法对bean进行处理,执行bean的初始化方法init-method方法,执行bean的BeanPostProcessor->postProcessAfterInitialization 最终生命bean对象放入IOC容器中4.通过context.getBean获取ioc容器中的bean对象。
json
Aware
容器对象、spring需要的bean(内置对象)
spring IOC的大致流程
spring 通过xml 定义bean的信息
k:String v:Objectk:Class v:Ojbectk:String v:ObjectFactoryk:String v:BeanDefinition
在堆中开辟一块空间
BeanPostProcessor:after
从容器中获取bean
postprocessor后置处理器|增强器
增强Bean
Class.forName(\"类的全限定名\")
request
实例化对象
BeanDefinitionReader定义规范方便扩展
客户端获取context.getBean
创建对象
普通bean
BeanFactory 是操作IOC容器的根接口,也是容器的接口Constructor constructor=clazz.getConstructor();Object object=constructor.newInstance();
BeanFactory
BeanDefinition
scope
Aware接口到底有什么作用? 当spring容器在创建的bean对象,在具体操作的时候如果需要容器的其他对象此时可以将当前bean对象实现Aware接口,来满足当前需要
填充属性值
IOC 控制反转(思想)
prototype
设置属性(populate)
增强BeanDefinition
封装BeanDefinition
yml
BeanFactoryPostProcesor
<beans> <bean id=? abstract init-method scope dependon ......> <properties name=? value=? /> <properties name=? value=? /> </bean> <bean id=? abstract init-method scope dependon ......> <constructor-arg name=? value=? /> <constructor-arg name=? value=? /> </bean></beans>
给属性设置值
xml
springboot
类.class
Environment
对象.getClass()
Spring扩展点参考地址:https://blog.csdn.net/qq_38826019/article/details/117389466
FactoryBean
执行init-method方法
容器bean
IOC容器的内部
实例化
反射创建对象的方式
BeanDefinitionReader
类对象Class获取方式
init-method
BeanPostProcessor:before
0 条评论
回复 删除
下一页