2024年3月6日
SpringSecurity 流程补充 注意: 基于 spring-boot-dependencies:2.7.7 首先需要了解 springboot2.7 升级 Changes to Auto-configuration 以后使用 autoconfigure 进行自动注入 代码地址 io.github.poo0054 启动 我们每次添加 <artifactId>spring-boot-starter-security</artifactId>,启动的时候会有一条类似的日志: Using generated springSecurity password: 1db8eb87-e2ee-4c72-88e7-9b85268c4430 This generated password is for development use……
阅读全文
2024年3月6日
说明 源码阅读仓库: spring-cloud-openfeign 参考资料和需要掌握的知识: SpringBoot 源码分析 Spring 源码分析 Spring Cloud 官网文档 Spring Cloud Commons 官网文档 Spring Cloud OpenFeign 官网文档 Feign 官方文档 Spring Cloud OpenFeign 介绍 Feign 是一个声明式的 Web 服务客户端,它使 Java 编写 Web 服务客户端变得更加容易。其实就是通过 JDK 代理生成接口的代理对象,方法的执行就是执行 Http 请求。而 OpenFeign 的作用是通过自动装配……
阅读全文
2024年3月6日
说明 源码阅读仓库: spring-cloud-gateway 参考资料和需要掌握的知识: Spring WebFlux 源码分析 Spring Cloud Circuit Breaker Spring Cloud Commons Spring Cloud Gateway 官网文档 Spring Cloud Gateway 介绍 功能:接收请求并根据匹配的路由进行转发。 术语: Route: 是路由规则的描述。它由 ID、目标 URI、Predicate 集合和Filter 集合组成。如果 Predicate 为真,则路由匹配。 Predicate: 这是一个 Java 8 函数接口。输……
阅读全文
2024年3月6日
说明 源码阅读仓库: spring-cloud-commons 参考资料和需要掌握的知识: SpringBoot 源码分析 Spring 源码分析 Spring Cloud 官网文档 Spring Cloud Commons 官网文档 Spring Cloud 介绍 SpringCloud 是在 SpringBoot 的基础上构建的。Spring Cloud 以两个库的形式提供了许多特性:Spring Cloud Context 和 Spring Cloud Commons。Spring Cloud Context 为 SpringCloud 应用程序的 ApplicationContext 提供扩展机制(引导上下文、加密、刷新属性和……
阅读全文
2024年3月6日
SpringBootBatch 源码 加载 版本使用 2.7.13 1 2 3 4 5 6 7 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.7.13</version> <scope>import</scope> <type>pom</type> </dependency> spring-autoconfigure-metadata.properties 1 2 3 4 5 6 7 8 9 10 11 12 13 org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration= org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration$DataSourceInitializerConfiguration= org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration$DataSourceInitializerConfiguration.ConditionalOnBean=javax.sql.DataSource org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration$DataSourceInitializerConfiguration.ConditionalOnClass=org.springframework.jdbc.datasource.init.DatabasePopulator org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration.AutoConfigureAfter=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration.ConditionalOnBean=org.springframework.batch.core.launch.JobLauncher org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration.ConditionalOnClass=javax.sql.DataSource,org.springframework.batch.core.launch.JobLauncher org.springframework.boot.autoconfigure.batch.BatchConfigurerConfiguration= org.springframework.boot.autoconfigure.batch.BatchConfigurerConfiguration$JpaBatchConfiguration= org.springframework.boot.autoconfigure.batch.BatchConfigurerConfiguration$JpaBatchConfiguration.ConditionalOnBean= org.springframework.boot.autoconfigure.batch.BatchConfigurerConfiguration$JpaBatchConfiguration.ConditionalOnClass=javax.persistence.EntityManagerFactory org.springframework.boot.autoconfigure.batch.BatchConfigurerConfiguration.ConditionalOnBean=javax.sql.DataSource org.springframework.boot.autoconfigure.batch.BatchConfigurerConfiguration.ConditionalOnClass=org.springframework.transaction.PlatformTransactionManager @EnableBatchProcessing 启动首先添加@EnableBatchProcessing,这个类引入了BatchConfigurationSelector. BatchConfigurationSelector 这里面主要是判断modular决定加载Modula……
阅读全文
2024年3月6日
Spring Boot 自动装配 Author: HuiFer 源码阅读仓库: SourceHot-spring-boot org.springframework.boot.autoconfigure.SpringBootApplication 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) public @interface SpringBootApplication { @AliasFor(annotation = EnableAutoConfiguration.class) Class<?>[] exclude() default {}; @AliasFor(annotation = EnableAutoConfiguration.class) String[] excludeName() default {}; @AliasFor(annotation = ComponentScan.class, attribute = "basePackages") String[] scanBasePackages() default {}; @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses") Class<?>[] scanBasePackageClasses() default {}; @AliasFor(annotation = Configuration.class) boolean proxyBeanMethods() default true; } EnableAutoConfiguration 1 2 3 4 5 6 7 8 9 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration { } AutoConfigurationImportSelector 类图 getAutoConfigurationMetadata() 1 2 3 4……
阅读全文
2024年3月6日
Spring Boot application 文件加载 Author: HuiFer 源码阅读仓库: SourceHot-spring-boot 如何找到这个加载的过程 创建配置文件application.yml 全局搜索 yml 换成properties搜索 我们以yml为例打上断点开始源码追踪 看到调用堆栈 一步一步回上去看如何调用具体方法的 ConfigFileApplicationListener 配置文件监听器 调用过程 org.springframework.boot.context.config.ConfigFileApplicationListener#addPropertySources 1 2 3 4 5 protected void addPropertySources(ConfigurableEnvironment environment, ResourceLoader resourceLoader) { RandomValuePropertySource.addToEnvironment(environment); // 加载器加……
阅读全文
2024年3月6日
SpringBoot 日志系统 Author: HuiFer 源码阅读仓库: SourceHot-spring-boot 包路径: org.springframework.boot.logging 日志级别 日志级别: org.springframework.boot.logging.LogLevel 1 2 3 public enum LogLevel { TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF } Java 日志实现 org.springframework.boot.logging.java.JavaLoggingSystem 1 2 3 4 5 6 7 8 9 10 static { // KEY : springBoot 定义的日志级别, value: jdk 定义的日志级别 LEVELS.map(LogLevel.TRACE, Level.FINEST); LEVELS.map(LogLevel.DEBUG, Level.FINE); LEVELS.map(LogLevel.INFO, Level.INFO); LEVELS.map(LogLevel.WARN, Level.WARNING); LEVELS.map(LogLevel.ERROR, Level.SEVERE); LEVELS.map(LogLevel.FATAL, Level.SEVERE); LEVELS.map(LogLevel.OFF, Level.OFF); } LEVELS 对象 1 2 3 4 5 6 7 8 9 10 protected static class LogLevels<T> { /** * key : SpringBoot 中定义的日志级别, value: 其他日志框架的日……
阅读全文
2024年3月6日
SpringBoot ConfigurationProperties Author: HuiFer 源码阅读仓库: SourceHot-spring-boot 本文主要对org.springframework.boot.context.properties.ConfigurationProperties进行分析 ConfigurationProperties 顶部注释 1 2 3 4 * @see ConfigurationPropertiesScan * @see ConstructorBinding * @see ConfigurationPropertiesBindingPostProcessor * @see EnableConfigurationProperties 看到ConfigurationPropertiesScan 去看……
阅读全文
2024年3月6日
SpringBoot ConditionalOnBean Author: HuiFer 源码阅读仓库: SourceHot-spring-boot 在 SpringBoot 中有下列当 XXX 存在或不存的时候执行初始化 ConditionalOnBean ConditionalOnClass ConditionalOnCloudPlatform ConditionalOnExpression ConditionalOnJava ConditionalOnJndi ConditionalOnMissingBean ConditionalOnMissingClass ConditionalOnNotWebApplication ConditionalOnProperty ConditionalOnResource ConditionalOnSingleCandidate ConditionalOnWebApplication ConditionalOnBean 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 @Target({ ElementType.TYPE, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Documented @Conditional(OnBeanCondition.class) public @interface ConditionalOnBean { /** * 需要匹配的 bean 类型 */ Class<?>[] value() default {}; /** * 需要匹配的 bean 类型 */ String[] type() default {}; /** * 匹配的 bean 注解 */ Class<? extends Annotation>[] annotation() default {}; /**……
阅读全文