
SpringBoot
文章平均质量分 80
看不见鲸鱼的鼻子
All in WEB3
展开
-
Spring依赖注入和循环依赖解决流程解析(看完更理解源码)
执行Bean属性设置方法流程.最下有截图.可根据截图理解调用链设置Bean属性设置调用之前Bean创建调用方法从refresh()方法第十一步finishBeanFactoryInitialization()方法最后一行preInstantiateSingletons(DefaultListableBeanFactory实现)然后调用AbstractBeanFactory.getBean–> doGetBean.从这里开启Bean创建以及三级缓存解决流程AbstractBean原创 2021-04-15 00:57:55 · 274 阅读 · 0 评论 -
了解SpringIOC流程重要组件BeanDefinition
介绍在SpringIOC流程分析过程中,对于Bean的控制反转创建过程一定离不开BeanDefinition.虽然它是接口,基于它有AbstractBeanDefinition,RootBeanDefinition,GenericBeanDefinition等各种实现.创建Bean的过程也会将不同的BeanDefinition转成RootBeanDefinition来进行使用.它经过Spring解析对应类或配置保存了该Bean的各种信息,例如该Bean的类型、是否是抽象类、作用域、该Bean的初始化,原创 2021-04-12 01:00:18 · 205 阅读 · 0 评论 -
AbstractApplicationContext.refresh()应用上下文刷新方法分析
前情提要: 学习源码光看博客文章基本没有记住的可能.结合源码和博客+实践才能够通过理解记住,看了很多天才断断续续看完,发现它和其他IOC、Bean生命周期都有关联,将之前片段式的认知串联起来了.这个刷新的代码很长,建议没耐心的时候就先不看,但是每天固定一个时间看一会,熟练了再串联起来看一遍.其他关联文章Spring控制反转IOC和依赖注入DI结构化简述Springboot自动装配及实现Spring循环依赖和三级缓存解决方案介绍BeanFactory和FactoryBean区别SpringApp原创 2021-04-11 15:47:31 · 870 阅读 · 0 评论 -
AbstractApplicationContext.refresh()应用上下文刷新方法
前情提要: 学习源码光看博客文章基本没有记住的可能.结合源码和博客+实践才能够通过理解记住,看了很多天才断断续续看完,发现它和其他IOC、Bean生命周期都有关联,将之前片段式的认知串联起来了.这个刷新的代码很长,建议没耐心的时候就先不看,但是每天固定一个时间看一会,熟练了再串联起来看一遍.上下文刷新方法被调用时机是SpringBoot.run启动中上下文准备方法(prepareContext)执行完毕后进行同步调用的上下文准备方法(prepareContext)主要执行SpringApplica原创 2021-04-11 15:29:24 · 721 阅读 · 6 评论 -
SpringApplication上下文刷新之Bean创建
本篇内容主要介绍SpringApplication启动过程中上下文刷新的第十一步finishBeanFactoryInitialization中最关键的创建单例Bean的步骤.它也包含了部分的Bean生命周期钩子调用.AbstractAutowireCapableBeanFactory.doCreateBeanprotected Object doCreateBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args)原创 2021-04-11 15:26:04 · 481 阅读 · 0 评论 -
SpringApplication上下文刷新第十一步finishBeanFactoryInitialization
在该步SpringApplication完成了 非单例 非懒加载(通过FactoryBean定义的Bean,并且是懒加载的如果没人使用,就先不会实例化。只会到使用的时候才实例化) Bean的加载工作.并在加载前提前加入了为AOP功能切入点织入通知的类以及设置标志位告知应用不许修改BeanDefinition这里会跑回到AbstractAutowireCapableBeanFactory.doCreateBean方法上.又复习了一次Bean生命周期protected void finishBeanFa原创 2021-04-11 15:24:58 · 288 阅读 · 0 评论 -
SpringApplication上下文刷新第六步
这个方法和第五步的方法相似,对BeanPostProcess按照排序优先级加入BeanFactory中,但是少了执行(invok)的步骤,用以Bean创建过程中调用(可参考我Bean生命周期那个文章).其中注入的MergedBeanDefinitionPostProcessor涉及到Bean生命周期和IOC功能可以结合流程分明的Spring的Bean生命周期、Spring控制反转IOC和依赖注入DI结构化简述看一下public static void registerBeanPostProcessor.原创 2021-03-22 08:31:24 · 201 阅读 · 1 评论 -
SpringApplication上下文刷新第五步
该步骤执行于上下文刷新时BeanFactory基础属性设置完毕后.第563行invokeBeanFactoryPostProcessors方法中.此时Spring已经扫描完所有包路径下所有的被注册的BeanDefinitionpublic static void invokeBeanFactoryPostProcessors( ConfigurableListableBeanFactory beanFactory, List<BeanFactoryPostProcessor> bea.原创 2021-03-22 08:31:00 · 217 阅读 · 0 评论 -
BeanFactory和FactoryBean区别
BeanFactory(Bean工厂)是一个容器,用于管理Bean属于IOC容器接口,定义IOC容器管理Bean的规范接口.用于管理Bean(查找Bean以及获取Bean部分元信息)FactoryBean(Bean创建工厂)是一个功能Bean,用于创建目标对象是接口,提供了Bean创建的拓展方式.实现该接口并实现getObject方法用于自定义指定类的创建逻辑使用Demo...原创 2021-03-16 00:36:37 · 266 阅读 · 0 评论 -
Spring控制反转IOC和依赖注入DI结构化简述
开头先举一个通俗的例子《Spring婚介所》Spring国规定不允许自己私人找对象(官方约定,不犯法,但是会乱了Spring国的正常婚配原则),并且每个人在喝孟婆汤投胎前Spring国都会要他将自己信息以及自己所需什么样子的对象登记到婚姻介绍所再喝孟婆汤投胎.投胎后婚介所会根据你的需求帮你把对象给你当然如果你对象还没投胎你得等对象投胎完再塞给你.看着就很棒解决了我们平时找对象的问题,只不过这个婚介所比较黑.你需要的这个对象全国就一个,谁要他都给,全国通用.而且你也不用管对象的生活管理问题,只需要用到对原创 2021-03-16 00:10:33 · 224 阅读 · 2 评论 -
面试:Springboot自动装配及实现
自动装配介绍SpringBoot通过定义自动配置接口,通过SPI机制加载外部自定义的自动配置类实现自动装配功能.做到了让我们只需要极少的配置或简单的注解就可以使用所需要的功能,开箱即用.Springboot通过SPI方式实现了自动装配,它规定了一套接口规范和配置类信息加载规范 : Springboot启动时会将启动类路径下所有有@Configuration注解的类注入容器中并且也会将所有依赖包中META-INF/spring-factories里定义的EnableAutoConfiguration这原创 2021-03-12 00:41:40 · 512 阅读 · 0 评论 -
Spring循环依赖和三级缓存解决方案介绍
介绍当多个对象存在互相组合的环状依赖关系,即A中有属性B,B中也有属性A.让Spring无法为其直接注入所需依赖单例属性注入依赖该问题在Spring中并不会报错,因为Spring已经通过缓存机制将其解决掉了.Spring三级缓存机制一级缓存用于存放已经实例化、初始化完成的Bean,单例池二级缓存用于存放已经实例化,但未初始化的Bean.保证一个类多次循环依赖时仅构建一次保证单例提前曝光池三级缓存用于存放该Bean的BeanFactory,当加载一个Bean会先将该Bean包装为Be原创 2021-03-10 01:31:45 · 903 阅读 · 1 评论 -
流程分明的Spring的Bean生命周期(超好记)
SpringBean生命周期描述了一个Bean从实例化、实例化完毕、初始化、初始化完毕以及加载入上下文中和Bean销毁的过程中执行了那些我们可拓展的点.我们依次从Bean被扫描,BeanDefinition加入到registry中、BeanFactory配置完毕、Bean实例化、Bean属性设置、Bean初始化完毕以及Bean消亡执行过的拓展接口讲解一遍即可.可查看依赖spring-beans代码中org.springframework.beans.factory.support.AbstractA.原创 2021-03-05 23:46:45 · 758 阅读 · 0 评论 -
Springboot启动流程(Springboot启动过程中我们可以做什么)
Springboot介绍Springboot并不是一个新的功能框架,而是Spring的一个子项目框架,它提供了自动装配的功能,简化了使用Spring框架的各种繁琐配置,而且集成了大部分主流组件配置.做到了Spring的开箱即用.Springboot启动Springboot启动离不开@SpringBootApplication注解,它为SpringApplication上下文的各类Bean加载提供了很大的支持@SpringBootApplication注解@SpringBootApplic原创 2021-03-04 00:58:20 · 838 阅读 · 3 评论 -
分享Debug设置断点学习分析堆栈信息,判断错误方位的经历
解决BUG,如果简单通过日志无法确定错误来源的话,就需要通过分析方法的调用栈来准确判断错误了。我也是第一次分析调用栈来查找这个找了一天的小错误。希望能够抛砖引玉原创 2020-02-25 11:03:10 · 1301 阅读 · 0 评论 -
SpringBoot使用Nacos做配置中心以及服务注册发现(SpringCloud版本)以及Feign集成调用
上节讲的Nacos做SpringBoot项目的配置中心以及服务发现,并不好用。不能自动服务注册以及配置非常难用(也可能是我没找到便捷的方法),然后就将SpringCloud版本的集成操作一下(为后面学习消息队列RabbitMQ(也可能是RocketMQ)以及Seata做铺垫)。集成了一天,小细节很难发现,我等菜鸡一定要注意约定的力量。下面基于Nacos服务已经启动的基础上,所以下载Nacos点...原创 2019-12-12 20:15:18 · 5915 阅读 · 0 评论 -
Springboot整合Nacos做配置中心以及服务注册与发现
Nacos的单Springboot版本依赖没有自动服务注册,只能手动注册点击这里第四条第一个查看如何注册到Nacos。如果您知道如何不使用SpringCloud版本可以自动注册的请留言谢谢。首先POM依赖,由于我们只使用springboot不涉及springcloud所以依赖只用添加简单的springboot的nacosconfig依赖就可以<parent> ...原创 2019-12-12 15:55:55 · 4356 阅读 · 6 评论 -
SpringBoot整合Nacos无法启动项目
使用springboot整合nacos服务注册发现启动时老是提示一个监测节点方法无发找到org.springframework.boot.actuate.health.CompositeHealthIndicator***************************APPLICATION FAILED TO START***************************De...原创 2019-12-12 12:34:26 · 6321 阅读 · 0 评论