首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring bean 标签加载、解析过程分析

概述 上一篇【Spring 加载、解析applicationContext.xml 流程】分析了从xml文件加载到开始解析xml里面的标签为止,基本都是跟spring 真正的核心没什么关系。...这篇我们分析 applicationContext.xml 中的bean 标签解析。...decoreBeanDefinitionIfRequired() 方法解析自定义标签,如果bean标签中包含自定义标签,则解析自定义标签 bean解析完成后,对bdHolder 进行注册。...AbstractBeanDefinition 对应这一个标签,bean标签中每一个属性都能在AbstractBeanDefinition 中找到对应的元素。 2....解析bean的所有属性 AbstractBeanDefinition() 方法 ? ? 解析bean标签的各种属性, 然后存储到GenericBeanDefinition 对象中,并返回。 <!

1.2K70
您找到你想要的搜索结果了吗?
是的
没有找到

SpringBoot基础篇Bean之自动加载

AutoConfiguration 通常来讲,要想实现上面的场景,建议是借助@Configuration注解的配置类来管理你自己的bean,这样对于其他使用方而言,只需要加载到你的配置类,就可以注册你的所有...bean了 1....实例演示 在新工程中,测试前面的工程的bean,看是否可以正常加载,这一小结结合源码运行查看,更有助于理解 源码工程说明 005-autoconfig 提供自动加载Bean的工程,内部定义了前面的两个测试...Bean和配置文件 004-bean 测试引入第三方jar中Bean的工程 测试代码如下,已删除无关的内容 @RestController public class DemoController {...(如只有Spring容器中有BeanA之后,我定义的Bean才生效) Bean初始化顺序的问题

51711

SpringBoot基础篇Bean之自动加载

[logo.jpg] 前面一篇介绍了Bean的常用姿势,在一个项目中,可能不会出现什么问题,可如果你提供了一个Jar包供第三方用户使用,那么你这个jar包中的Bean,能被第三方加载么?...AutoConfiguration 通常来讲,要想实现上面的场景,建议是借助@Configuration注解的配置类来管理你自己的bean,这样对于其他使用方而言,只需要加载到你的配置类,就可以注册你的所有...bean了 1....实例演示 在新工程中,测试前面的工程的bean,看是否可以正常加载,这一小结结合源码运行查看,更有助于理解 源码工程说明 005-autoconfig 提供自动加载Bean的工程,内部定义了前面的两个测试...Bean和配置文件 004-bean 测试引入第三方jar中Bean的工程 测试代码如下,已删除无关的内容 @RestController public class DemoController {

2.3K00

SpringBoot源码学习(十一) - bean的实例化过程

上一篇文章中我们解释了Spring对于类级别的注解的解析过程,通过类级别的注解spring基本是将所有该加载的类都加载到待解析的BeanDefineMap中去了。...考虑到类的实例化过程可能会依赖其他的bean还有一些类内部的注解比如@Autowired、@Queries等都需要考虑。所以说getBean是比较复杂的。...; // 先尝试从缓存中加载bean,如果不存在会调用getBean方法,因为创建单例bean的时候存在循环依赖的问题 //Spring创建bean的时候是不等bean创建结束就将bean...parentBeanFactory中加载。...()); } } return (T) bean; } 通过上述代码查看,我们大概描述一下getBean的过程,首先对bean的名称做一些处理,之前的bean名称都是添加工厂名称的

78620

bean加载

The default is "false". bean如果配置lazy-init="true"时,则在容器初始化过程中不会执行依赖注入,而当使用时才会去初始化bean,真的是这样么?...下面就是深入源码探究,会分析以下三种情况: bean A没有引用任何其他bean,且配置成懒加载 bean A引用了bean B,且bean A配置成懒加载 bean A引用了bean B,bean A...没有配置为懒加载,bean B配置为懒加载 首先代码入口还是 AbstractApplicationContext#refresh方法,其中在 AbstractApplicationContext#finishBeanFactoryInitialization...bd.isLazyInit(),会判断bean是否为抽象类、单例、懒加载,如果不符合就不会执行if里的代码,其实第一、二中情况都不符合的,所以不会执行到if语句里的代码.关键是第三种情况,分析思路之前这篇...,以下总结: bean配置lazy-init="true"时,在容器初始化时不会创建该bean 若一为单例且非懒加载bean A引用了懒加载bean B时,在bean A被创建时,会创建bean B

75230

SpringBoot基础系列-实战】如何指定 bean 最先加载(应用篇)

在日常的业务开发中,绝大多数我们都是不关注 bean加载顺序,然而如果在某些场景下,当我们希望某个 bean 优于其他的 bean 被实例化时,往往并没有我们想象中的那么简单 <!...启动类指定方式 在实际的 SpringBoot 开发中,我们知道都会有一个启动类,如果希望某个类被优先加载,一个成本最低的简单实现,就是在启动类里添加上依赖 @SpringBootApplication...接入方:你的 bean 要求被首先加载这个得你自己保证啊,我写些 if/else 代码已经很辛苦了,哪有精力保证你的这个优先加载!!!你自己都没法保证,那我也没办法保证......常规流程 新建一个 SpringBoot 项目工程,源码中 springboot 版本为2.2.1.RELEASE 首先我们来定义这个目标 bean: DatasourceLoader public class...上面这套流程,属于一般的工具包写法了,请注意,这种方式,一般情况下是应用程序内声明的 bean 加载完毕之后,才会加载第三方依赖包中声明的 bean;也就是说通过上面的写法,DatasourceLoader

3.2K30

SpringBoot系列教程之Bean加载顺序之错误使用姿势辟谣

在网上查询 Bean加载顺序时,看到了大量的文章中使用@Order注解的方式来控制 bean加载顺序,不知道写这些的博文的同学自己有没有实际的验证过,本文希望通过指出这些错误的使用姿势,让观文的小伙伴可以知道...err.case2: 配置类中 Bean 声明方法上添加@Order Bean 除了上面的自动扫描之外,还有一种方式就是通过@Bean注解,下面我们演示一下在配置类中指定 bean 加载顺序的错误 case...demo2() { return new Demo2(); } } 如果@Order 注解实际上控制的是配置类中 Bean加载顺序,那么 BConf1 中的 Bean 应该优先加载...; } } 当注解生效时,BConf 会优先级加载 ? 从输出结果来看,和我们预期的不一样;那么这个注解是不是作用于配置类中的 Bean 的顺序,而不是配置类本身呢?...下面用简单的几句话介绍一下正确的姿势 @Order注解不能指定 bean加载顺序,它适用于 AOP 的优先级,以及将多个 Bean 注入到集合时,这些 bean 在集合中的顺序 @AutoConfigureOrder

1.1K60

SpringBoot系列教程之Bean加载顺序之错误使用姿势辟谣

转自:小灰灰blog 在网上查询 Bean加载顺序时,看到了大量的文章中使用@Order注解的方式来控制 bean加载顺序,不知道写这些的博文的同学自己有没有实际的验证过,本文希望通过指出这些错误的使用姿势...err.case2: 配置类中 Bean 声明方法上添加@Order Bean 除了上面的自动扫描之外,还有一种方式就是通过@Bean注解,下面我们演示一下在配置类中指定 bean 加载顺序的错误 case...demo2() { return new Demo2(); } } 如果@Order 注解实际上控制的是配置类中 Bean加载顺序,那么 BConf1 中的 Bean 应该优先加载...; } } 当注解生效时,BConf 会优先级加载 ? 从输出结果来看,和我们预期的不一样;那么这个注解是不是作用于配置类中的 Bean 的顺序,而不是配置类本身呢?...下面用简单的几句话介绍一下正确的姿势 @Order注解不能指定 bean加载顺序,它适用于 AOP 的优先级,以及将多个 Bean 注入到集合时,这些 bean 在集合中的顺序 @AutoConfigureOrder

34610

Java刷新bean重新加载bean 上下文 刷新bean

defaultListableBeanFactory.destroySingleton("wxMpService"); //按照旧有的逻辑重新获取实例,WxMpService是我自己逻辑中的类 获取要刷新实例下的bean...方法 WxMpService wxMpService = WxConfig.wxMpService(); //重新注册同名实例,这样在其他地方注入的实例还是同一个名称,但是实例内容已经重新加载 defaultListableBeanFactory.registerSingleton...("wxMpService",wxMpService); } // 此实例在 WxConfig 类下 //实例 可写@Bean("beanName") @Bean public static WxMpService...); wxMpService.setWxMpConfigStorage(wxMpConfigStorage()); return wxMpService; } 通过以上代码可实现 重新加载...Bean 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/171136.html原文链接:https://javaforall.cn

1.6K10

SpringBoot启动流程(四)application配置文件加载过程

加载加载application配置文件 跟进Loader加载器的构造方法中 Loader(ConfigurableEnvironment environment, ResourceLoader resourceLoader...格式的配置文件 到这里,我们可以知道springboot支持的不同配置文件是通过选择不同的加载器来实现 下面,我们回到Loader加载器的load方法中,跟进加载的主要逻辑 public void load...,在Loader初始化的时候我们获得了两个加载器,同时每个加载器支持两种格式。...总结 application配置文件的加载过程逻辑并不复杂,只是具体细节比较多,所以代码中包含了不少附加的逻辑。...至于具体的细节如:加载文件的时候编码相关、多个文件相同配置是否覆盖、加载器如何解析各种配置文件的内容有时间也可以仔细阅读。

83430

Spring容器和Bean加载

Bean加载过程 早期的Spring都是通过配置XML进行Bean加载的,过程大致如下: ?...第一次想容器getBean操作会触发Bean创建过程,实例化出一个Bean,根据BeanDefinition中类信息实例化Bean。 将实例化的Bean放到单例缓存中。...在Bean实例化过程中,Spring为我们预留了好多API,我们可以在Bean的实例化前后,初始化前后做一些自己的逻辑。 ? 1....实现了ApplicationContextAware接口的类,可以在该Bean加载过程中获取Spring的应用上下文ApplicationContext,通过ApplicationContext可以获取...实现了BeanFactoryAware接口的类,可以在该Bean加载过程中获取加载Bean的BeanFactory,同时也可以获取这个BeanFactory中加载的其它Bean

70730

详解springboot通过spi机制加载mysql驱动过程

好了,上面简要概述了下JDK的SPI工作机制,下面继续看spring框架如何使用spi机制来完成数据库驱动的自动管理的(加载、注销),接下来就按照事情发展的先后的先后顺序把mysql驱动加载的全过程屡一下...,笔者使用的是springboot 2.x,数据源使用的数据源为Hikari,这是后来居上的一款数据源,凭借其优秀的性能以及监控机制成为了springboot 2.x之后首推的数据源, 用过springboot...类,该类定义了创建HikariDataSource的Bean方法 ***/ @Configuration @ConditionalOnClass(HikariDataSource.class...如何使用jdk的spi机制来加载数据库驱动的,至于DriverManager的getConnection方法调用过程可以使用类似的方式分析下,在DriverManager的getConnection方法打个断点...,当代码停在断点处时,通过Idea或者eclipse的堆栈信息就可以看出个大概了 希望本文能帮助一些人了解mysql驱动加载的整个过程,加深对SPI机制的理解

2.1K20

SpringBoot是怎么在实例化时候将bean加载进入容器中

之前写过的很多spring文章,都是基于应用方面的,这次的话,就带大家来一次对spring的源码追踪,看一看spring到底是怎么进行的初始化,如何创建的bean,相信很多刚刚接触spring的朋友,或者没什么时间的朋友都很想知道...3、我们不看new SpringApplication(Sources)过程了,有兴趣可以自己研究一下,里面主要是判断了当前的运行环境是否为web,当然,博主这次的环境是web,然后看run: try语句块内的内容最为重要...例如第268行的componentScanParser.parse方法,在这里会扫描我们的注 解类,并将带有@bean注解的类进行registry。...16、现在我们回到第6步的第二条分支,此处是非懒加载bean初始化位置,注意,我们之前只是对bean的信息进行了获取,然后创建的对象为BeanDefinition,却不是bean的实例,而现在则是创建...bean的实例。

3K20
领券