网站专题教程,网站关键词seo排名,重庆开县网站建设公司推荐,怎么知道一个网站是谁做的前言
大概10来年以前#xff0c;当时springboot刚刚出现并没有流行#xff0c;当时的Java开发者们开发Web应用主要是使用spring整合springmvc或者struts、iBatis、hibernate等开发框架来进行开发。项目里一般有许多xml文件配置#xff0c;其中配置了很多项目中需要用到的Be…前言
大概10来年以前当时springboot刚刚出现并没有流行当时的Java开发者们开发Web应用主要是使用spring整合springmvc或者struts、iBatis、hibernate等开发框架来进行开发。项目里一般有许多xml文件配置其中配置了很多项目中需要用到的Bean扫描的路径等等类似下面这样 看起来很麻烦但是相比于让我们自己在代码里自己构建各种对象自己的set各种属性自己维护大量对象的依赖关系使用这样预先配置交给Spring管理后续采用依赖注入的方式在需要的地方拿来使用的方式已经是相当的舒服了。
SpringBoot
SpringBoot框架的命名关键在Boot上或许Boot Spring更能说明这个微框架设计的初衷也就是快速启动一个Spring应用。快在哪里呢这里如果我们要在项目里整合Redis则只需要添加如下的依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependency然后添加上redis的连接参数就可以需要操作Redis的地方注入RedisTemplate对象来使用了不需要在xml中配置RedisConnectionFactory、RedisTemplate等相关依赖的类了。
spring-boot-autoconfigure
这里有个比较关键的依赖spring-boot-autoconfigure里面有一个RedisAutoConfiguration
Configuration(proxyBeanMethods false)
ConditionalOnClass(RedisOperations.class)
EnableConfigurationProperties(RedisProperties.class)
Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {BeanConditionalOnMissingBean(name redisTemplate)public RedisTemplateObject, Object redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {RedisTemplateObject, Object template new RedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;}BeanConditionalOnMissingBeanpublic 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接口的能力。