当前位置: 首页 > article >正文

Spring Boot Starter介绍

前言

大概10来年以前,当时springboot刚刚出现并没有流行,当时的Java开发者们开发Web应用主要是使用spring整合springmvc或者struts、iBatis、hibernate等开发框架来进行开发。项目里一般有许多xml文件配置,其中配置了很多项目中需要用到的Bean,扫描的路径等等,类似下面这样:
https://www.chengpei.top/upload/spring-xml.png
看起来很麻烦,但是相比于让我们自己在代码里自己构建各种对象,自己的set各种属性,自己维护大量对象的依赖关系使用,这样预先配置交给Spring管理,后续采用依赖注入的方式在需要的地方拿来使用的方式,已经是相当的舒服了。

SpringBoot

SpringBoot框架的命名关键在"Boot"上,或许Boot Spring更能说明这个微框架设计的初衷,也就是快速启动一个Spring应用。快在哪里呢,这里如果我们要在项目里整合Redis,则只需要添加如下的依赖:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

然后添加上redis的连接参数,就可以需要操作Redis的地方注入RedisTemplate对象来使用了,不需要在xml中配置RedisConnectionFactoryRedisTemplate等相关依赖的类了。

spring-boot-autoconfigure

这里有个比较关键的依赖spring-boot-autoconfigure,里面有一个RedisAutoConfiguration

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {

	@Bean
	@ConditionalOnMissingBean(name = "redisTemplate")
	public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
			throws UnknownHostException {
		RedisTemplate<Object, Object> template = new RedisTemplate<>();
		template.setConnectionFactory(redisConnectionFactory);
		return template;
	}

	@Bean
	@ConditionalOnMissingBean
	public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)
			throws UnknownHostException {
		StringRedisTemplate template = new StringRedisTemplate();
		template.setConnectionFactory(redisConnectionFactory);
		return template;
	}
}

这里的@ConditionalOnClass是一个基于条件的配置,在满足条件时会加载当前配置类,类似的注解在org.springframework.boot.autoconfigure.condition包下还有许多,例如:
@ConditionalOnClass
@ConditionalOnBean
@ConditionalOnMissingClass
@ConditionalOnMissingBean
@ConditionalOnProperty

有了这些注解的配合,我们就可以结合@EnableAutoConfigurationn实现基于条件的自动配置了。
SpringBoot之所以能够流行,很大一部分功劳需要归功于它预先提供的一系列自动配置的依赖模块,而这些依赖模块都是基于以上注解实现的,这也意味着所有的这些依赖模块都是按需加载的,只有符合某些特定条件,这些依赖模块才会生效,这也就是我们所谓的“智能”自动配置。

spring.factories

例如以上redis自动配置的例子,这里只要环境中有RedisOperations就会自动配置Redis相关类,你可以在这个自动配置类附近找到许多这样的xxxxAutoConfiguration,很多组建都可以类似这样通过引入依赖后直接使用,但是如果只有自动配置类的话,其实这个类也不会被加载,因为我们在启动SpringBoot应用时,使用的@SpringBootApplication注解,他只会自动扫描当前包以及子包下的类,如果扫描不到自然也不会加载了,所以这里还要配合META-INF/spring.factories文件,文件中配置了所有需要被扫描到的自动装配类,SpringBoot应用启动时,会由SpringFactoriesLoader取读取该文件加载,这里比较像Java SPI机制,对Java SPI感兴趣也可以看看这篇博文:Java SPI机制介绍及原理分析
以上就是SpringBoot核心功能Starter的一个介绍,下一篇博文(实现一个自己的spring-boot-starter,基于SQL生成HTTP接口)我会基于这个原理实现一个自己的SpringBootStarter模块,只要引入了该模块,项目就自然具有了通过配置SQL自动生成Http接口的能力。


http://www.kler.cn/a/513425.html

相关文章:

  • 51c大模型~合集105
  • Golang的文件处理优化策略
  • 2023年江西省职业院校技能大赛网络系统管理赛项(Linux部分样题)
  • 网络编程 | UDP组播通信
  • 【Linux】gawk编辑器二
  • Spring Boot 中使用 @Transactional 注解配置事务管理
  • 「2024 博客之星」自研Java框架 Sunrays-Framework 使用教程
  • systemverilog中的force,release和assign
  • 《多模态语言模型:一个开放探索的技术新领域》
  • 智创 AI 新视界 -- AI 在交通运输领域的智能优化应用(16 - 9)
  • Alluxio 联手 Solidigm 推出针对 AI 工作负载的高级缓存解决方案
  • PHP 中调用京东商品详情 API 接口的示例
  • 深度剖析select与poll:网络编程的I/O多路复用基石
  • 总结5..
  • 从零开始打造一个Java基于 Spring Boot 的旅游信息化平台
  • [已解决]chatgpt被降智了怎么办?(无法联网、识别图片、文件、画图)
  • cmake 可使用的构建系统
  • Java如何向http/https接口发出请求
  • C++模拟实现queue
  • 人工智能与量子计算:未来编程的碰撞与共鸣
  • 安装wxFormBuilder
  • Flutter调用HarmonyOS NEXT原生相机拍摄相册选择照片视频
  • 《Long Context Compression with Activation Beacon》笔记
  • mybatis(19/134)
  • 【HarmonyOS NEXT】华为分享-碰一碰开发分享
  • 初创企业或中小企业如何进行海外市场问卷调查?