
spring boot
文章平均质量分 79
superCleanCoder
希望写的代码和生活一样都能简单但不简陋
展开
-
spring boot启动源码分析(三)之Environment准备
本篇开始讲启动过程中Environment环境准备,Environment是管理所有配置的实例对象,像application.yml、系统属性、环境变量等配置都可以通过Environment.getProperty(key)获取原创 2025-01-09 10:34:21 · 1016 阅读 · 0 评论 -
Spring boot源码之EnvironmentPostProcessor
EnvironmentPostProcessor主要是在环境实例Environment准备好后,发布EnvironmentPreparedEvent时,EnvironmentPostProcessorApplicationListener响应该事件,调用各个EnvironmentPostProcessor.postProcessEnvironment对环境实例Environment进行后置处理。EnvironmentPostProcessor配置在spring.factories中,主要涉及。原创 2025-01-09 10:33:06 · 891 阅读 · 0 评论 -
spring-boot启动源码分析(二)之SpringApplicationRunListener
在上一篇《》后,继续看了一个月的Spring boot启动源码,初步把流程看完了,接下来会不断输出总结,以巩固这段时间的学习。同时也希望能帮到同样感兴趣的同学。话不多说,进入正题环境介绍:spring boot版本:2.7.18主要starter:spring-boot-starter-webSpringApplication实例构造后,就开始调用它的run方法,开始启动spring boot。方法如下:本篇主要介绍上图中的4步,SpringApplicationRunListener会重点讲。原创 2025-01-02 22:12:15 · 1127 阅读 · 0 评论 -
spring-boot之 自定义上下文初始化器ApplicationContextInitializer及源码分析
通过遍历我们在SpringApplication构造方法中获取的初始化器,依次调用初始化器的initialize方法,这样初始化器的执行就完成了。到了这里,大家可能就会疑惑:这里初始化器都是从spring.factories中定义的才会执行,那我们通过context.initializer.classes应用变量配置的初始化器怎么执行呢。这里获取的初始化器只有在spring.factories定义的才能获取到,也就是我们的第一种配置方式。(2)构造器只是实例化了初始化器,但并没有直接调用执行初始化方法。原创 2024-11-28 09:59:58 · 945 阅读 · 0 评论 -
spring boot之@Import注解的应用
但因为没有直接导入它两的外围类UserConfiguration这个配置类,所以不能用它的Bean方法获取,而是用对应类获取:下方的两种获取方式,UserInfo可以获取到bean,但ClassInfo不行。然后重写它的registerBeanDefinitions方法逻辑,自行实现bean定义,然后通过注册器进行bean的注册。这样UserConfiguration中定义的Bean就会被加载了,我们直接在调试状态下可以看到使用上下文是可以获取到UserConfiguration中定义的Bean的。原创 2024-12-09 22:52:57 · 589 阅读 · 0 评论 -
Spring boot集成mybatis
2、map-underscore-to-camel-case:将数据库返回的下划线格式的字段映射到Java对象的驼峰式命名属性,这样可以省去resultMap去定义数据库表字段和实体类的映射关系。1、type-aliases-package:开启包别名,用于mapper.xml简化类型映射,如:配置此项后,type可以只写类名,mybatis会自动去配置包名中找该类。我们以java config的方式配置事务,所以就不在配置文件中配置mybatis开头的配置项了。(二)配置文件中增加数据库相关配置。原创 2024-12-09 14:15:44 · 237 阅读 · 0 评论 -
Spring boot之BeanDefinition介绍
Bean的创建是一个比较复杂的过程,它并不像我们创建对象一样只是直接new一下就行,虽然有些bean确实就是New一下。在这个过程中,BeanDefinition作为bean定义,存储了bean创建所需要的信息,一个后置处理器也是通过修改BeanDefinition实现对bean的扩展和修改。翻译一下:BeanDefinition是一个接口,它描述了一个具有属性值、构造参数值以及其他更多的信息,这些信息有具体的实现提供。factoryBeanName:bean的工厂名称,用于创建bean实例。原创 2024-11-30 14:24:32 · 657 阅读 · 0 评论 -
spring-boot启动源码分析(一)之SpringApplication实例构造
spring.factory是spring boot的核心,里面定义了spring boot需要使用的接口,以及对应的实现类。loadSpringFactories(classLoaderToUse)返回的是类加载器加载所有的spring.fatories数据,返回的是Map,key是工厂接口,value是对应实现类列表,所以通过factoryTypeName就可以获得对应的实现类,这里只是类的全限定名。然后对工厂实例进行排序,因为有些实例执行是有顺序要求的。原创 2024-11-27 21:50:43 · 1130 阅读 · 0 评论 -
spring-boot自定义ApplicationListener及源码分析
上面代码可以看到代理类也监听了所有的事件,然后在ApplicationEnvironmentPreparedEvent事件时才初次响应,并且通过getListeners获取所有代理的ApplicationListeners,然后它自己实现了一个事件广播器,然后把获取的ApplicationListeners通过到addApplicationListener加入到广播器中,最后进行事件的广播转发。我们可以看到,是通过我们配置的context.listener.classes获得类名,然后通过反射实例化返回。原创 2024-11-26 22:17:21 · 513 阅读 · 0 评论 -
spring boot自定义banner
图标banner是通过配置“spring.banner.image.location”自定义的,文字则和配置spring.banner.location有关。然后在配置文件yml中定义“spring.banner.image.location”和"spring.banner.location"配置。获取自定义的图标banner和文字banner,如果没有自定义则使用spring boot 默认的banner。入口:在SpringApplication.run方法中会调用printBanner打印。原创 2024-11-23 10:05:04 · 213 阅读 · 0 评论