SB2源码学习
文章平均质量分 91
SpringBoot源码学习
原飞木
Java开发工程师
展开
-
@RefreshScope源码解析
RefeshScope这个注解想必大家都用过,在微服务配置中心的场景下经常出现,它可以用来刷新Bean中的属性配置,那么它是如何做到的呢?让我们来一步步揭开它神秘的面纱。就是说我们在修改了bean属性的时候项目不需要重新启动,就可以拿到最新的值。我们先来看下@RefreshScope的接口@Target({/***/ //创建基于类的代理(使用 CGLIB) ScopedProxyMode proxyMode() default ScopedProxyMode . TARGET_CLASS;原创 2023-03-26 00:25:48 · 1331 阅读 · 1 评论 -
Spring如何解决单例循环依赖
所谓的循环依赖是指,A 依赖 B,B 又依赖 A,它们之间形成了循环依赖。那么spring在自动注入的时候是如何解决这个问题的呢?答案是:三级缓存,就是三个map,通过提早的暴露对象来解决这个问题。原创 2022-10-24 21:37:16 · 2012 阅读 · 0 评论 -
mybatis中mapper.xml热加载
只能说放在jar之外的目录,然后应用在启动的时候专门去这个目录读取xml加载到mybatis的内存中,这样就实现了mybatis的基本功能。如果说要热加载的话就需要有专门的程序去监听这个目录下文件的变化,哪个发生了变化就重新加载到内存中,使之生效。的方式不支持从外面的目录加载xml。刚开始我的想法就是:在应用打包成jar的时候,这些xml已经被打包进了jar里面了,如果要替换的话这些xml肯定是不能打包进去。通过查看mbatis的源码,我们发现mybatis经过解析会把xml的数据缓存在以下的变量中。原创 2022-08-21 14:01:21 · 2463 阅读 · 0 评论 -
Spring IOC之资源加载器
ResourceLoader 中最核心的方法为 getResource(),它根据提供的 location 返回相应的 Resource,而 DefaultResourceLoader 对该方法提供了核心实现(它的其它子类都没有提供覆盖该方法,所以可以断定ResourceLoader 的资源加载策略就封装 DefaultResourceLoader中)返回 ClassLoader 实例,对于想要获取 ResourceLoader 使用的 ClassLoader 用户来说,可以直接调用该方法来获取。.....原创 2022-08-11 21:04:14 · 1164 阅读 · 0 评论 -
SpringBoot之conditional注解
首先我们先了解一下@Conditional注解,@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,需要注入的Bean满足给定条件才可以注入到Spring IOC容器中。- 作用:根据是否满足某一个特定条件来决定是否创建某个特定的Bean- 意义:Springboot实现自动配置的关键基础能力...原创 2022-06-14 22:51:08 · 1440 阅读 · 2 评论 -
spring-mybatis源码解析
本文主要围绕三个问题展开?- 1.spirng是怎么和mybatis关联起来的?- 2.xml和mapper是如何解析的- 3.mapper中的方法是怎么和xml中的方法关联起来的?原创 2022-05-11 21:45:05 · 1405 阅读 · 0 评论 -
mybatis-start原理解析
mybatis-spring-boot-starter的作用就是,在SpringBoot启动时,去扫描所有Mapper接口,然后为其增加一个代理实现类,在调用的过程中,我们实际调用的是这个代理对象。springboot提供了大量的starter方便集成各个组件。每个组件基本只要依赖了jar包,基本不需要或者需要少量的配置信息就可以直接使用了,那么在这简单的starter背后的原理是什么呢?原创 2022-04-17 20:49:01 · 1727 阅读 · 1 评论 -
SpringBoot配置类解析-ConfigurationClassPostProcessor后置处理器
ConfigurationClassPostProcessor是一个BeanFactory的后置处理器,因此它的主要功能是参与BeanFactory的建造,在这个类中,会解析加了@Configuration的配置类,还会解析@ComponentScan、@ComponentScans注解扫描的包,以及解析@Import等注解。ConfigurationClassPostProcessor主要重写了BeanDefinitionRegistryPostProcessor的postProcessBeanDe原创 2022-04-11 22:45:00 · 2194 阅读 · 0 评论 -
SpringBoot属性加载-run方法(prepareEnvironment)
我们在项目中有时候会发现设置的变量没有生效,可能是被其它优先级高的变量给覆盖了。所以我们需要搞清楚SpringBoot的加载顺序。Spring Boot属性加载顺序(优先级由高到底)原创 2022-04-05 23:22:17 · 1465 阅读 · 0 评论 -
Aware原理
Aware接口从字面上翻译过来是感知捕获的含义。单纯的bean(未实现Aware系列接口)是没有知觉的;实现了Aware系列接口的bean可以访问Spring容器。这些Aware系列接口增强了Spring bean的功能,但是也会造成对Spring框架的绑定,增大了与Spring框架的耦合度。原创 2022-03-30 21:59:41 · 1795 阅读 · 0 评论 -
SpringBoot启动器加载器-run方法(callRunners)
在项目开发中,经常需要在项目启动的时候去读取配置文件、或者把数据库的数据加载到缓存中。Spring Boot提供了ApplicationRunner和CommandLineRunner来帮助我们实现这些需求,他们都是在Spring容器初始化完毕之后执行起run方法。原创 2022-03-23 21:09:17 · 3271 阅读 · 2 评论 -
SpringBoot-Bean创建流程
refresh()中最最重要的一个方法该方法负责初始化所有的单例bean。到目前为止,应该说是是 BeanFactory 已经创建完成,并且所有的实现了 BeanFactoryPostProcessor 接口的 Bean 都已经初始化并且其中的 postProcessBeanFactory(factory) 方法已经得到回调执行了。而且 Spring 已经“手动”注册了一些特殊的 Bean,如 environment、systemProperties 等。剩下的就是初始化 singleton bean原创 2022-03-21 20:37:35 · 5393 阅读 · 1 评论 -
SpringBoot-refresh解析
## refresh解析refresh方法是bean配置读取加载入口,也是SpringBoot启动的核心方法。从SpringApplication的run方法的`refreshContext(context);`里面可以找到原创 2022-03-19 22:15:00 · 2669 阅读 · 0 评论 -
SpringBoot监听器解析(ApplicationListener)
监听器模式又可以理解为观察者模式,在使用过程时监听某些事件的发生,然后对这些事件做出响应处理。ApplicationEvent :事件抽象类,根据不同的事件 ApplicationListener:接口,只有一个方法,传递了一个事件ApplicationEventMulticaster:事件广播器,主要就是用来负责对ApplicationListener的管理,添加、删除、事件广播。ApplicationEventPublisher:接口,主要用于发布事件原创 2022-03-12 10:42:27 · 2700 阅读 · 1 评论 -
SpringBoot系统初始化加载机制
springboot启动系统初始化加载机制,ApplicationContextInitializer类初始化以及SpringFactoriesLoader的作用原创 2022-03-09 22:18:01 · 2006 阅读 · 1 评论