1.玩转 Spring Boot 原理篇(自动装配前凑之自定义Stater)
2.spring-boot-starter-parent åªä¸ªjarå
3.eclipse ä¸å建spring starter project
4.SpringBoot源码学习——SpringBoot自动装配源码解析+Spring如何处理配置类的
5.(二)springboot之spring-boot-starter-web
玩转 Spring Boot 原理篇(自动装配前凑之自定义Stater)
自动装配在Spring Boot框架中的重要性不言而喻,它简化了开发者的工作,使得应用的构建更加高效、便捷。为了更深入地理解这一原理,本文将以自定义Spring Boot Starter的ugui游戏源码方式,从代码层面直观感受自动装配的威力。
在开始之前,我们先对历史文章进行整理,以确保全面了解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和自动配置类,设置条件注解以实现自动装配功能。ava 视频源码接着,编写配置文件和自动装配类,完成自动装配的机制。
在完成自定义Starter的构建后,我们将该Starter引入到游戏服务端的配置中,通过application.properties文件开启自动装配功能。至此,游戏服务端可以自动装配所需的组件,简化了代码的编写和维护。
通过实际运行GameApplication,我们可以看到游戏服务端通过自动装配成功运行猜数字游戏,验证了自定义Starter的正确性。
### 总结
本文详细介绍了如何通过自定义Spring Boot Starter来实现自动装配的接口源码解析功能,从代码层面深入理解了Spring Boot的自动装配机制。通过本次实践,我们不仅掌握了如何构建自定义Starter,还对Spring Boot的自动装配原理有了更直观的认识。接下来,我们将继续深入源码解析,探讨自动装配实现的细节,敬请期待!
spring-boot-starter-parent åªä¸ªjarå
springå®æ¹å éï¼libç®å½éé¤äºå¸¦resourceåç¼çjarå ï¼åå¦å»ºè®®é½å ä¸ï¼å ¥é¨ä¹åï¼ä½ å°±æç½ä½ ç项ç®ééè¦åªäºå ï¼ä¸éè¦åªäºå äºã带resourceåç¼çjaræ¯æºç ã
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实现,筛选、排序候选者,并解析@Import注解实现自动装配。
增强配置类,ConfigurationClassPostProcessor对full模式的配置进行增强,确保@Import正确处理,CGLIB用于增强原配置类,确保生命周期完整,避免真正执行@Bean方法逻辑。
深入解析AutoConfigurationImportSelector实现自动装配,通过spring.boot.enableautoconfiguration设置开启状态,读取spring-autoconfigure-metadata.properties和META-INF/spring.factories文件,筛选并加载自动配置类。
(二)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思维导图、流程图 获取。