//实例化一个工厂DefaultListableBeanFactory
org.springframework.context.support.GenericApplicationContext->GenericApplicationContext()
1、实力化一个AnnotatedBeanDefinitionReader
2、ClassPathBeanDefinitionScanner,能够扫描我们bd,能够扫描一个类,并且转换成bd
org.springframework.context.annotation.AnnotationConfigApplicationContext#AnnotationConfigApplicationContext()
委托AnnotationConfigUtils
org.springframework.context.annotation.AnnotatedBeanDefinitionReader#AnnotatedBeanDefinitionReader()
org.springframework.context.annotation.AnnotationConfigUtils#registerAnnotationConfigProcessors() //几乎所有后置处理器都是在reader构造方法时调用AnnotationConfigUtils加进去的
1、添加AnnotationAwareOrderComparator类的对象,主要去排序
2、ContextAnnotationAutowireCandidateResolver
3、往BeanDefinitionMap注册一个ConfigurationClassPostProcessor? org.springframework.context.annotation.internalConfigurationAnnotationProcessor
why?因为需要在invokeBeanFactoryPostProcessors
invokeBeanFactoryPostProcessors主要是在spring的beanFactory初始化的过程中去做一些事情,怎么来做这些事情呢?
委托了多个实现了BeanDefinitionRegistryPostProcessor或者BeanFactoryProcessor接口的类来做这些事情,有自定义的也有spring内部的
其中ConfigurationClassPostProcessor就是一个spring内部的BeanDefinitionRegistryPostProcessor
因为如果你不添加这里就没有办法委托ConfigurationClassPostProcessor做一些功能
到底哪些功能?参考下面的注释
4、RequiredAnnotationBeanPostProcessor
.......
org.springframework.context.annotation.AnnotationConfigUtils#registerAnnotationConfigProcessors()
//往BeanDefinitionMap注册
org.springframework.context.annotation.AnnotationConfigUtils#registerPostProcessor
//准备好bean工厂,实例化对象
org.springframework.context.support.AbstractApplicationContext#refresh
//准备工作包括设置启动时间,是否激活标识位, 初始化属性源(property source)配置
org.springframework.context.support.AbstractApplicationContext#prepareRefresh
//得到beanFactory?因为需要对beanFactory进行设置
org.springframework.context.support.AbstractApplicationContext#obtainFreshBeanFactory
//准备bean工厂
1、添加一个类加载器
2、添加bean表达式解释器,为了能够让我们的beanFactory去解析bean表达式
3、添加一个后置处理器ApplicationContextAwareProcessor
4、添加了自动注入别忽略的列表
5、。。。。。。
6、添加了一个ApplicationListenerDetector后置处理器(自行百度)
org.springframework.context.support.AbstractApplicationContext#prepareBeanFactory
目前没有任何实现
org.springframework.context.support.AbstractApplicationContext#postProcessBeanFactory
1、getBeanFactoryPostProcessors()得到自己定义的(就是程序员自己写的,并且没有交给spring管理,就是没有加上@Component)
2、得到spring内部自己维护的BeanDefinitionRegistryPostProcessor
org.springframework.context.support.AbstractApplicationContext#invokeBeanFactoryPostProcessors
//调用这个方法
//循环所有的BeanDefinitionRegistryPostProcessor
//该方法内部postProcessor.postProcessBeanDefinitionRegistry
org.springframework.context.support.PostProcessorRegistrationDelegate#invokeBeanDefinitionRegistryPostProcessors
//调用扩展方法postProcessBeanDefinitionRegistry
org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry
//拿出的所有bd,然后判断bd时候包含了@Configuration、@Import,@Compent。。。注解
org.springframework.context.annotation.ConfigurationClassPostProcessor#processConfigBeanDefinitions
1、的到bd当中描述的类的元数据(类的信息)
2、判断是不是加了@Configuration metadata.isAnnotated(Configuration.class.getName())
3、如果加了@Configuration,添加到一个set当中,把这个set传给下面的方法去解析
org.springframework.context.annotation.ConfigurationClassUtils#checkConfigurationClassCandidate
//扫描包
org.springframework.context.annotation.ConfigurationClassParser#parse(java.util.Set<org.springframework.beans.factory.config.BeanDefinitionHolder>)
org.springframework.context.annotation.ConfigurationClassParser#parse(org.springframework.core.type.AnnotationMetadata, java.lang.String)
//就行了一个类型封装
org.springframework.context.annotation.ConfigurationClassParser#processConfigurationClass
1、处理内部类 一般不会写内部类
org.springframework.context.annotation.ConfigurationClassParser#doProcessConfigurationClass
//解析扫描的一些基本信息,比如是否过滤,比如是否加入新的包。。。。。
org.springframework.context.annotation.ComponentScanAnnotationParser#parse
org.springframework.context.annotation.ClassPathBeanDefinitionScanner#doScan
org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider#findCandidateComponents
org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider#scanCandidateComponents
相关推荐
【史诗级】详细阐述借助AI实现对Windows蓝屏原因进行精确定位的方法
在解决问题的过程中我决定把这一切都记录下来,并整理出一套通用的方法,方便快速精确定位引起蓝屏的真实原因。今天我的蓝屏代码是0x000000ef,而你或许是遇到另一个蓝屏代码,代码本身代表的含义不是这里的讨论重点,重要的是解决问题的底层逻辑。
第4讲:BeanFactory的一个重要的实现类,DefaultListableBeanFactory,及资源的载入
为什么提这个类呢?直接说这个类可能会感到陌生,但是提到XmlBeanFactory,可能就有点感觉了吧,实际上DefaultListableBeafFactory是XmlBeanfFactory的父类。 不管是哪个BeanFactory,他们的启动过程都类似,这里以DefaultListableBeanFactory为例 启动Ioc容器的方式: XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("beans.xml"))
干法刻蚀工艺进阶:如何通过调节DC自偏压优化刻蚀速率和各向异性
本文深入探讨了干法刻蚀工艺中DC自偏压的精细调控艺术。DC自偏压是影响刻蚀速率和各向异性的关键因素,文章通过实战案例,详细分析了如何通过调节射频功率、频率、腔室压力及气体成分等参数,间接而有效地控制DC自偏压,从而优化高深宽比硅沟槽等复杂结构的刻蚀效果,实现工艺性能的精准提升。
spring之DefaultListableBeanFactory的bean的创建过程
一、DefaultListableBeanFactory简介 DefaultListableBeanFactory是bean加载的核心部分,是Spring注册及加载的默认实现。继承关系如下图: AbstractAutowireCapableBeanFactory完成Bean的创建,属性的注入,切面代理的产生,bean的生命周期的管理。 二、AbstractAu...
国产麒麟系统中的PaddleOCR离线绿色部署:高效安全的文字识别新纪元
摘要:本文详细介绍了PaddleOCR在银河麒麟V10SP1系统上的离线部署方案。通过Conda虚拟环境隔离依赖,采用离线包安装方式实现无网络部署,支持80+语言识别。重点讲解了模型量化剪枝优化、多线程处理等性能调优技巧,并提供了完整的OCR识别代码示例。该方案具有数据本地化处理的安全优势,适用于医疗票据数字化等对隐私要求严格的场景,同时解决了模型加载失败、内存不足等常见问题。
DataGridView 右键菜单复制(公共)
dataGridView1.CellMouseClick += new DataGridViewCellMouseEventHandler( (sender1, e1) => { if (e1.Button == MouseButtons.Right) {
DefaultListableBeanFactory 对象自定义赋值
DefaultListableBeanFactory 对象自定义赋值
普通开普勒式望远镜光学设计1-初始结构设计选型与物镜像差校正
普通开普勒式望远镜光学设计1: 完成了望远镜的总体结构设计,确定其物镜与目镜的初始结构选型,使用Zemax软件完成望远镜的双胶合物镜的像差校正。
java.lang.NoSuchMethodError: org.springframework.beans.factory.config.ConfigurableListableBeanFactor
java.lang.NoSuchMethodError: org.springframework.beans.factory.config.ConfigurableListableBeanFactory.getApplicationStartup()Lorg/springframework/core/metrics/ApplicationStartup; 问题原因:检查spring-core版本与spring-jdbc版本是否一致,同理如果是其他包检查版本是否一致 错误: <dependency&
第一百三十九回 介绍三个BLE包
本章回中主要介绍了Flutter中BLE的概念和操作方法,主要介绍了三个BLE包的功能和差异,以方便大家在BLE操作中选择不同的包。
YOLO26原创自研: 魔改Bottleneck,具备多尺度和特征通道融合的结构
魔改Bottleneck,具备多尺度和特征通道融合的结构,该模型在检测准确性方面都取得了良好的效果,尤其在缺陷检测方向。
spring boot 程序 报错
*************************** APPLICATION FAILED TO START *************************** Description: An attempt was made to call a method that does not exist. The attempt was made from the following location: org.springframework.context.support.PostProc..
深入解析机器人软件开发中的核心:状态机管理(FSM)—— 理论、实践与优化
状态机(FSM)是机器人软件开发中管理复杂行为逻辑的核心工具,广泛应用于导航、任务执行、故障处理等场景。本文系统探讨状态机的基础理论(定义、要素)、主流设计模式(经典FSM、分层状态机HSM、行为树BT),以及工业级实现方法(代码架构、线程安全、调试技巧)。通过移动机器人导航和机械臂任务执行的案例,分析分层状态机的实际应用,并总结常见陷阱(如状态爆炸、阻塞操作)与优化策略(异步化、事件过滤)。
【spring源码系列-06】refresh中obtainFreshBeanFactory方法的执行流程
obtainFreshBeanFactory
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
DefaultListableBeanFactory初始化源码详解
本文解析了Spring框架中DefaultListableBeanFactory的初始化过程,重点关注其在AnnotationConfigApplicationContext创建时的构造流程。通过时序图和类继承关系分析。 核心逻辑包括: 标记BeanNameAware等三个接口为忽略自动注入 根据GraalVM环境检测结果选择实例化策略(Simple或Cglib) 解析揭示了Spring容器的底层设计思想,包括依赖处理机制和环境适配策略。结合源码可深入理解Spring的核心初始化过程。
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
spring实例化-构造函数实例化
spring实例化分为构造函数实例化和静态工厂实例化;当我们没有指定具体的实例化方式时,默认采用无参的构造函数实例化。 一:bean,xml <bean id="userService" class="service.UserService"> <property name="map"> <map> <entry key="name" value="test"/> <entry key="age" value="20"/>
手撕spring02源码
创建工厂DefaultListableBeanFactory注册bean(相关类信息),将注册的类信息放入DefaultListableBeanFactory的map中通过bean工厂获取类的对象调用继承了抽象类AbstractAutowireCapableBeanFactory继承的AbstractBeanFactory的getBean方法从抽象类AbstractBeanFactory继承的DefaultSingletonBeanRegistry类的getSingleton方法获取类信息。
Spring IOC源码解析:Spring容器启动流程
基本概念 Spring是一个IOC容器 当我们不用Spring进行开发时,我们需要在代码中设置对象的依赖关系。当我们用了Spring之后,由Spring来管理这种依赖关系,当我们想使用对象时,直接从Spring容器中获取即可 BeanDefinition 在Spring中对象被叫做Bean,因为Spring Bean在Java类的基础上增加了很多概念,比如scope(作用域),isLazyInit(是否延迟初始化),isSingleton(是否单例),此时Java类不能完整的描述,所以需要新的定义描述类,.
SpringBean 生命周期各种BeanPostProcessor调用时机整理
【代码】SpringBean 生命周期各种BeanPostProcessor调用时机整理。
Spring源码深度解析 容器的基本实现总结
容器基本用法 bean 定义 配置文件 测试代码 直接使用 BeanFactory 作为容器对于 Spring 的使用来说并不多见,甚至是甚少使用,因为 在企业级的应用中大多数都会使用的是 ApplicationContext 功能分析 读取配置文件 beanFactoryTest.xml 根据 beanFactoryTest.xml 中的配置找到对应的类的配直,并实例化 调用实例化后的实例 ConfigReader :用于读取及验证配置文件 我们要用配置文件里面的东西,当然首先 要做的就是读取,然后
Spring-DefaultListableBeanFactory介绍
Spring-DefaultListableBeanFactory是Spring Framework中的一个核心类,用于实现Bean的管理和依赖注入功能。DefaultListableBeanFactory是BeanFactory的一个具体实现类,它继承自AbstractAutowireCapableBeanFactory并实现了ListableBeanFactory和BeanDefinitionRegistry接口。它的主要作用是通过读取和解析Bean定义信息来创建和管理Bean实例。
【Spring】DefaultListableBeanFactory 详解
DefaultListableBeanFactory 是 Spring 容器的核心实现,提供完整的 Bean 管理功能。它作为 Bean 注册中心,支持动态注册 BeanDefinition、依赖注入和生命周期管理,并能处理循环依赖。与其他 BeanFactory 不同,它实现了 BeanDefinitionRegistry 接口,支持编程式容器配置。核心功能包括:注册/获取 Bean、管理后置处理器、预初始化单例等。适用于测试场景、轻量级容器需求及需要精细控制 Bean 生命周期的场景,相比 Applic
【五】Spring源码分析之实例化Bean----DefaultListableBeanFactory的preInstantiateSingletons方法
一、简介 该方法最主要做的事是:把BeanDefinition注册表中的所有单例、非懒加载的bean全部实例化 该方法的入口: 二、源码分析 DefaultListableBeanFactory类preInstantiateSingletons方法 public void preInstantiateSingletons() throws BeansException { if...
Spring-IOC之DefaultListableBeanFactory
DefaultListableBeanFactory是一个可以独立运行使用的默认IOC容器实现类,通过与BeanDefinitionReader建立依赖关系后,在启动期间可以对事先准备的元数据(Configuration MetaData,如XML配置信息等)进行加载和解析,并将解析后得到的描述信息(BeanDefinition)进行编组,最后再将编组对象(BeanDefinitionHolder)注册到DefaultListableBeanFactory的本地缓存中。当DefaultListableB
DefaultListableBeanFactory学习
DefaultListableBeanFactory 是 Spring 框架中的一个核心类,它实现了 BeanFactory、HierarchicalBeanFactory 和 ListableBeanFactory 接口,同时也间接实现了 BeanDefinitionRegistry 和 AliasRegistry 接口。DefaultListableBeanFactory 提供了完整的 bean 工厂功能,包括注册、定义、配置和管理 bean,还支持 bean 的别名设置。
Spring之强大的DefaultListableBeanFactory
如何查看类继承结构参考这里
【Spring源码】BeanFactory和DefaultListableBeanFactory
摘要:DefaultListableBeanFactory是Spring容器中BeanFactory接口的完整实现,作为最核心的容器实现类,它继承了基础BeanFactory接口并扩展了ConfigurableListableBeanFactory和BeanDefinitionRegistry接口的功能。该实现类不仅提供基本的Bean获取功能,还实现了Bean注册、依赖注入、类型查找等全套容器功能。在Spring架构中,BeanFactory定义基础契约,而DefaultListableBeanFactor
1万+



被折叠的 条评论
为什么被折叠?



