1.eclipse ä¸å建spring starter project
2.SpringBoot源码学习——SpringBoot自动装配源码解析+Spring如何处理配置类的
3.Spring - starter机制
4.spring-boot-starter-parent åªä¸ªjarå
5.玩转 Spring Boot 原理篇(自动装配前凑之自定义Stater)
6.(二)springboot之spring-boot-starter-web
eclipse ä¸å建spring starter project
ä¸.å¨eclipseä¸å®è£ spring tool suiteæ件:
1.helpâeclipseMaketplace..âæç´¢sts.
2.å®è£ æ件,å®è£ ä¸æåçè¯,éä½eclipseçæ¬(-,亲æµè½æ)
1 éæ©spring starter project è¿è¡é¡¹ç®çå建ï¼å¹¶ç¹å»nextå°ä¸ä¸æ¥
2 ä¿®æ¹é¡¹ç®å称name å spring bootççæ¬ï¼å ¶ä»é¡¹é½å¯ä»¥éæ©é»è®¤
è¿éå¯ä»¥éæ©nextï¼ä¹å¯ä»¥éæ©finishãå¦æéæ©nextæé®ï¼åä¼çå°æ¥éª¤3ççé¢ï¼å¦æéæ©finishæé®ï¼åç´æ¥è·³å°æ¥éª¤4çé¢ã
3 è¿éå¯ä»¥éæ©å·¥ä½ç©ºé´çï¼æ们é½éæ©é»è®¤ç©ºé´å³å¯ï¼ç¹å»finishå°ä¸ä¸æ¥
4 è¿éæ们ä¼å¾å°ä¸ä¸ªspring boot ç项ç®çç®åç»æ
è¿æ¶ï¼eclipseä¸è¬ä¼èªå¨çè¿è¡é¡¹ç®çæ建ï¼å è½½æ¯æjarå çï¼å¾å°æ¥éª¤6çç»æï¼å¦æeclipseæªèªå¨æ建项ç®ï¼åéè¦æå¨è¿è¡é¡¹ç®æ建ï¼åç §æ¥éª¤5è¿è¡æä½ã
5 ç¹å»é¡¹ç®å称ï¼å³é® éæ© Maven ï¼éæ© Update Project... ï¼å¾é Force Update of Snapshots/Releasesé¡¹ï¼ å¹¶ç¹å»OKæé®ã
ç¶åï¼é¡¹ç®ä¼è¿å ¥å°æ´æ°çè¿ç¨ä¸ï¼æé´å¯ä»¥çå°ç±»ä¼¼å¦ä¸çæ´æ°è¿åº¦æ¡
6 å¾ é¡¹ç®æ´æ°å®æåï¼æ们å¯ä»¥çå°ä¸ä¸ªå®æ´çspring boot 项ç®
SpringBoot源码学习——SpringBoot自动装配源码解析+Spring如何处理配置类的
SpringBoot通过SPI机制,借助外部引用jar包中的META-INF/spring.factories文件,实现引入starter即可激活功能,简化手动配置bean,实现即开即用。
启动SpringBoot服务,乐直播系统源码通常使用Main方法启动,其中@SpringBootApplication注解包含@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan,自动装配的核心。
深入分析@SpringBootApplication,其实质是执行了@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个注解的功能,简化了配置过程,强调了约定大于配置的思想。
SpringBoot的源码更改自动装配原理着重于研究如何初始化ApplicationContext,Spring依赖于ApplicationContext实现其功能,SpringApplication#run方法为初始化ApplicationContext的入口。
分析SpringApplication构造方法,SpringApplication.run(启动类.class, args) 实际调用的是该方法,其关键在于根据项目类型反射生成合适的ApplicationContext。
选择AnnotationConfigServletWebServerApplicationContext,此上下文具备启动Servlet服务器和注册Servlet或过滤器类型bean的能力。
准备刷新ApplicationContext,SpringBoot将主类注册到Spring容器中,以便@ConfigurationClassPostProcessor解析主类注解,发挥@Import、@ComponentScan的作用。
刷新ApplicationContext过程包括一系列前置准备,如将主类信息封装成AnnotatedGenericBeanDefinition,解析注解并调用BeanDefinitionCustomizer自定义处理。
解析配置类中的注解,通过BeanDefinitionRegistryPostProcessor和ConfigurationClassParser实现,currentmap源码筛选、排序候选者,并解析@Import注解实现自动装配。
增强配置类,ConfigurationClassPostProcessor对full模式的配置进行增强,确保@Import正确处理,CGLIB用于增强原配置类,确保生命周期完整,避免真正执行@Bean方法逻辑。
深入解析AutoConfigurationImportSelector实现自动装配,通过spring.boot.enableautoconfiguration设置开启状态,读取spring-autoconfigure-metadata.properties和META-INF/spring.factories文件,筛选并加载自动配置类。
Spring - starter机制
Spring starter 是 SpringBoot 的核心组件,它能简化开发过程,提供可插拔式的插件,无需繁琐的pythonbif源码配置即可使用其功能。
实现原理基于两个关键步骤:引入 maven 依赖和配置文件。引入 maven 是为了导入 jar 包,SpringBoot 启动时会读取 jar 包内的 resources/META-INF/spring.factories 文件,根据文件中的配置信息自动寻找需要配置的类。
在创建 SpringBoot 程序时,通常在启动类中生成一个入口函数并添加 @SpringBootApplication 注解,该注解包含 @EnableAutoConfiguration,用于自动扫描 jar 包内的配置。
进入 @EnableAutoConfiguration,会发现它使用了 @Import(AutoConfigurationImportSelector.class) 注解,该注解将包含 @Configuration 注解的配置类装配至程序中。
以红绿灯管理器的 Redission-spring-boot-starter 为例,其结构如下:
1. pom.properties:配置 Maven 必需的项目版本、groupId 和 artifactId。
2. pom.xml:配置依赖的 jar 包。
3. MANIFEST.MF:记录 jar 文件的基本信息。
4. spring.factories:配置需要自动装配的foa源码类信息。
5. spring.provides:配置所依赖的 artifactId,为 IDE 提供信息,无其他作用。
6. RedissonAutoConfiguration:是自动配置类,主要负责 Redis 连接操作,包含辅助性注解,决定 @Configuration 注解的生效场景及顺序。
主要辅助注解包括:
1. RedissonProperties:属性实体类,将 yml 或 properties 配置文件转化为 bean,设置了前缀,方便在项目的 application.properties 配置文件中提示相关 bean 实例属性。
2. RedissonAutoConfigurationCustomizer:实现自定义 RedissonClient 的自动配置。
通过引入 Redission-spring-boot-starter,自动引入 Redis 连接模块,只需在 yml 或 properties 文件中配置基本参数,Spring 自动装配,完成连接功能。
自定义 starter 的方法参考 starter 的实现原理,建议命名为 *-spring-boot-starter。此过程需遵循特定规范,确保自定义 starter 可以无缝集成至 SpringBoot 环境。
spring-boot-starter-parent åªä¸ªjarå
springå®æ¹å éï¼libç®å½éé¤äºå¸¦resourceåç¼çjarå ï¼åå¦å»ºè®®é½å ä¸ï¼å ¥é¨ä¹åï¼ä½ å°±æç½ä½ ç项ç®ééè¦åªäºå ï¼ä¸éè¦åªäºå äºã带resourceåç¼çjaræ¯æºç ã
玩转 Spring Boot 原理篇(自动装配前凑之自定义Stater)
自动装配在Spring Boot框架中的重要性不言而喻,它简化了开发者的工作,使得应用的构建更加高效、便捷。为了更深入地理解这一原理,本文将以自定义Spring Boot Starter的方式,从代码层面直观感受自动装配的威力。
在开始之前,我们先对历史文章进行整理,以确保全面了解Spring Boot的集成应用,包括MySQL、Druid、HikariCP等数据库连接,MyBatis、JPA和事务支持,Redis的集成,Actuator和Spring Boot Admin的使用,RabbitMQ的引入,@Scheduled和静态、动态定时任务的实现,以及任务动态管理代码篇和定时任务框架Quartz。
接下来,我们将关注Spring Boot自动装配的核心原理,特别是自定义Starter的实现。以mybatis-spring-boot-starter为参考,我们将通过模仿其自动配置机制来构建一个猜数字游戏服务的Starter。
### 找到葫芦
将mybatis-spring-boot-starter作为葫芦参考,观察其在pom文件中的依赖结构和自动配置机制。重点关注其在META-INF/spring.factories文件中的配置,以及自动配置类MybatisAutoConfiguration,如何生成SqlSessionFactory、SqlSessionTemplate等MyBatis实例,并将其注册到Spring容器。
### 自定义Spring Boot Starter实现
按照葫芦画瓢的思路,我们将创建一个猜数字游戏服务的自定义Starter。首先,定义项目结构,添加依赖配置,创建Service和自动配置类,设置条件注解以实现自动装配功能。接着,编写配置文件和自动装配类,完成自动装配的机制。
在完成自定义Starter的构建后,我们将该Starter引入到游戏服务端的配置中,通过application.properties文件开启自动装配功能。至此,游戏服务端可以自动装配所需的组件,简化了代码的编写和维护。
通过实际运行GameApplication,我们可以看到游戏服务端通过自动装配成功运行猜数字游戏,验证了自定义Starter的正确性。
### 总结
本文详细介绍了如何通过自定义Spring Boot Starter来实现自动装配的功能,从代码层面深入理解了Spring Boot的自动装配机制。通过本次实践,我们不仅掌握了如何构建自定义Starter,还对Spring Boot的自动装配原理有了更直观的认识。接下来,我们将继续深入源码解析,探讨自动装配实现的细节,敬请期待!
(二)springboot之spring-boot-starter-web
springboot版本:3.0.2
通过查看spring-boot-starter-web依赖文件的源码,我们可以发现其依赖的jar包包括以下内容:
spring-boot-starter-web依赖启动器的主要功能是为Web开发提供所有必要的底层依赖。
因此,在pom.xml文件中引入spring-boot-starter-web依赖启动器之后,我们就可以直接进行Web场景的开发,无需额外导入Tomcat服务器或其他Web依赖文件。当然,这些依赖文件的版本号是由spring-boot-starter-parent父依赖进行统一管理的。
详细依赖图,请访问:spring-boot-starter-web依赖图 思维导图模板_ProcessOn思维导图、流程图 获取。