Spring 创建 Bean 的简要流程
2023-06-19 21:52:15 6 举报
Spring 创建 Bean 的简要流程
作者其他创作
大纲/内容
PostProcessor后置处理器增强器
K: StringV: BeanDefinition
BeanDefinition
为了解决这个问题
实例化
从容器中获取
BeanPostProcessor
BeanFactory的创建
动态的修改 BeanDefinition
BeanFactoryPostProcessor
放到 IOC 容器中
BeanFactory的相关属性的设置
执行BeanFactoryPostProcessor
解析配置文件
properties
构造器或者 set等范式注入
实例化使用反射的方式
Constructor con = clazz.getConstructor();Object obj = con.newInstance();
定义规范接口,用来将不同的配置文件中配置的信息都解析成spring 规定的配置信息,这个接口是BeanDefinitionReader它会有一系列的实现类来解析前面这些配置文件
普通对象
yaml
类名.class
设置aware接口的属性
BeanPostProcessor:before
K: StringV: ObjectFactory
未来可以扩展的配置文件,比如说json
对象.getClass()
如果 BeanPostProcessor 和 Bean 关联,则 Spring 将调用该接口的前置初始化方法 postProcessBeforeInitialzation 对 Bean 进行加工操作,此处非常重要,Spring 的 AOP 就是利用他实现的
实例化的过程如果遇到动态读取配置文件中的属性的情况应该怎么办,例如<property name=\"url\" value = \"${jdbc.url}\"/>想要动态修改 BeanDefinition 怎么实现?
Spring Bean
完整的 bean
如果 BeanPostProcessor 和 Bean 关联,则 Spring 将调用该接口的后置初始化方法 postProcessAfterInitialzation ;此时 Bean 已经被应用系统使用了
Spring 容器内置的对象
scope=\"singleton\",加入到 Spring IOC 容器中,Spring 来管理 Bean 的生命周期
获取到Class
Aware 系列接口的作用当 Spring 容器创建 Bean 对象的时候,如果需要容器中其他对象支持的时候,这时就可以通过实现相应的 Aware 接口来满足当前的需要例如:如果创建 Bean 的时候需要 ApplicationContext 对象支持,就可以实现 ApplicationContextAware 然后重写一下方法即可具体的代码实例,可以参考 A.class常用的 Aware 有:1. 如果 Bean 实现了 BeanNameAware 接口,则 Spring 调用 Bean 的 setBeanName 方法传入 Bean 的 id2. 如果 Bean 实现了 BeanFactoryAware的,则 Spring 调用 setBeanFactory 方法传入当前工厂实例的引用3.如果Bean 实现了 ApplicationContextAware,则 Spring 调用 setApplicationContext 方法传入当前 ApplicationContext 实例的引用
BeanPostProcessor:after
Class.forName(\"全限定类名\")
创建 bean 的简要流程
执行destory-method指定的方法
BeanFactory整个容器的根接口,也是容器的入口Constructor con = clazz.getConstructor();Object obj = con.newInstance();
K: ClassV: Object
反射实例化的过程
K: String V: Object
解析
调用 InitializingBean的 afterPropertiesSet 方法
指定在创建 Bean 的时候要执行的一个方法
增强beanDefinition信息
所谓的容器其实就是一个 Map
封装成 BeanDefinition
填充属性
可以通过 applicationContext.getBean()获取
IOC容器
我们自定义的对象,使用 Xml 或者注解放入到 IOC 容器中的对象
创建 bean 的流程,也可以成为 bean 的生命周期
加载配置文件xml,properties
IOC 容器中存放的数据
如果 Bean 实现了 DisposableBean,则 spring 会调用 destory 方法销毁 Bean
执行init-method指定的方法
BeanDefinitionReader
容器对象
xml
BeanFactory的其他的属性的设置,BeanPostProcessor
增强 bean信息
scope=\"prototype\",将该 Bean 交给调用者,由调用者来管理的bean的生命周期,spring不在管理
收藏
0 条评论
下一页