栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

ioc的理解(io模块工作原理)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ioc的理解(io模块工作原理)

IOC核心实现原理

文章目录

前言一、Definition二、BeanFactory、ApplicationContext三、Bean属性赋值阶段四、初始化Bean属性五、Bean扩展六、BeanFactory、FactoryBean


前言

IOC容器核心实现原理


一、Definition

注解配置Bean还是XML方式配置,都要经过一个过程就是创建这些类对应BeanDefinition【BeanDefinition是spring用来描述一个类的,类似于Java描述一个类是Class类对象】,spring通过BeanDefinition来实例化Bean
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、BeanFactory、ApplicationContext

AppliationContext继承了BeanFactory,ApplicationContext提供了比BeanFactory更丰富的功能,BeanFactory默认实现类DefaultListableBeanFactory

三、Bean属性赋值阶段

在根据类信息转载成BeanDefinition对象时不会对属性进行处理,而是借助BeanWrapperBean包装类对属性进行初始化。是在一个Bean对象创建之后将其装载成一个BeanWrapper对象。

PostProcessor后置处理器 或增强处理器用于扩展功能使用

PostProcesser(Interface)function
BeanDefinitionRegistryPostProcessorExtension to the standard BeanFactoryPostProcessor SPI, allowing for the registration of further bean definitions
BeanFactoryPostProcessorcustom modification of an application context’s bean definitions
BeanPostProcessorcustom modification of new bean instances — for example, checking for marker interfaces or wrapping beans withproxies
abstractfunction
PlaceholderConfigurerSupport BeanFactoryPostProcesser抽象类Abstract base class for property resource configurers that resolve placeholders(占位符) in bean definition property values
implementsfunction
ConfigurationClassPostProcessor BeanDefinitionRegistryPostProcessor实现类
扩展:springboot自动装配原理
This post processor is priority-ordered as it is important that any @Bean methods declared in @Configuration classes have their corresponding bean definitions registered before any other BeanFactoryPostProcessor executes


在调用BeanFactoryPostProcesser之前属性值如下

调用invokeBeanFactoryPostProcessors(beanFactory);这个方法之后,属性为

自定义BeanFactory后置处理器(可以定义多个,可以@order设置优先级)

实现接口BeanFactoryPostProcesser 重写方法,在实现类加上@Component
四、初始化Bean属性


1、实例化
这个过程创建Bean对象
2、初始化

知识储备: 比如spring内置属性BeanFactory 、ApplicationContext,这两个属性要怎么初始化赋值? ps:容器对象不止这两个

Aware接口没有如何方法

BeanFactoryAware接口 setBeanFactory()ApplicationContextAware接口setApplicationContextAware()
这两个方法可以在Bean初始化阶段被spring调用进行BeanFactory、ApplicationContext,这两个属性初始化反射方式

属性赋值分为用户自定义属性赋值,容器对象赋值【通过set方法】

容器对象对应set方法所在接口如下

问题:既然是set方法,那这些容器对象能不能我们为其写个set方法来实现注入?

五、Bean扩展

BeanPostProcesser Bean后置处理器 两个方法

postProcessBeforeInitialization 初始化前置处理器执行初始化postProcessAfterInitialization 初始化后置处理器

AOP【基于代理】是在Bean扩展进行实现,其一实现类`

下面这张图片中初始化的步骤更准确是执行初始化方法init-method其实是可以用来进行属性初始化赋值,但是在上面属性已经初始化了,这个可以使用。spring是通过invokeInitMethods调用。

注解@AutoWired @Value在Bean生命周期哪个部分

spring扩展部分留在BeanPostProcesser

六、BeanFactory、FactoryBean

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/776019.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号