spring boot的工作原理和重要组件

spring boot的工作原理和重要组件

总的流程图:
在这里插入图片描述

SpringBootApplication

在这里插入图片描述
ctrl+鼠标左键进入具体方法界面
在这里插入图片描述

@SpringBootApplication:spring boot的主配置类
	该注解包含:
	@SpringBootConfiguration: 包含@Configuration,表示“配置类”: 
		1.该类是一个配置类	
		2.加了@Configuration注解的类,会自动纳入Spring 容器 @Component)

	
		

@Configuration

@Configuration
public class A//表示A是一个 用于 配置的类
{
}

@EnableAutoConfiguration:

使spring boot可以自动配置 :可以找到@SpringBootApplication所在类的包 ,作用:就会将该包及所有的子包 全部纳入spring容器
spring boot在启动时,会根据META-INF/spring.factories找到相应的三方依赖,并将这些依赖引入本项目
在这里插入图片描述
@Import(EnableAutoConfigurationImportSelector.class):给容器中导入组件

EnableAutoConfigurationImportSelector:导入哪些组件的选择器
所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中
会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件
在这里插入图片描述
有了自动配置类,免去了我们手动编写配置注入功能组件等的工作调用SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);
Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作.以前我们需要自己配置的东西,自动配置类都帮我们
J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar

总结:
	编写项目时,一般会 对自己写的代码  以及 三方依赖 进行配置。但是spring boot可以自动进行配置:
	  a:自己写的代码,spring boot通过@SpringBootConfiguration自动帮我们配置;
	  b. 三方依赖 通过spring-boot-autoconfigure-2.0.3.RELEASE.jar中
	     的META-INF/spring.factories进行声明,然后通过@EnableAutoConfiguration开启使用即可
	spring-boot-autoconfigure-2.0.3.RELEASE.jar包中 包含了 J2EE整合体系中 需要的依赖。

@AutoConfigurationPackage:自动配置包

@Import(AutoConfigurationPackages.Registrar.class):Spring的底层注解@Import,给容器中导入一个组件;导入的组件由AutoConfigurationPackages.Registrar.class;将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器
在这里插入图片描述

如何实现自动装配

具体细节见点击观看具体类之间的跳转

研究org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration,\
		通过观察该源码 发现:
		@Configuration:标识此类是一个配置类  、将此类纳入springioc容器
		@EnableConfigurationProperties(HttpEncodingProperties.class): 通过HttpEncodingProperties将编码设置为了UTF_8 (即自动装配为UTF_8, 如何修改改编码:通过改HttpEncodingProperties的 predfix+属性名 进行修改 [配置文件中,yml/properties])
		   即:该注解给了默认编码utf8,并且提供了prefix+属性名 的方式 供我们修改编码。


		@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)
		当属性满足要求时,此条件成立  :要求 如果没有配置spring.http.encoding.enabled=xxx, 则成立。
	
	总结:1每一个XxAutoConfiguration 都有很多条件@ConditionalOnXxx,当这些条件都满足时,
	则此配置自动装配生效(utf-8)。但是我们可以手工修改改 自动装配: XxxProperties文件中的  
	prefix.属性名=value 
	      2全局配置文件中的key, 来源于某个Properties文件中的 prefix+属性名
		--boot通过XxAutoConfiguration实现自动装配 ,修改默认值 XxxProperties( prefix+属性名)
	     	
		如何直到 spring boot开启了哪些自动装配、禁止了哪些自动装配: application.properties中 debug=true
		Positive matches列表 表示 spring boot自动开启的装配
		Negative matches列表 表示spring boot在此时 并没有启用的自动装配。
		
	![在这里插入图片描述](https://img-blog.csdnimg.cn/20200804115936940.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMzgxMzE3,size_16,color_FFFFFF,t_70)


自己写的
引入三方依赖(jar、配置)

配置文件

作用:spring boot 自动配置(约定,8080 ).可以使用配置文件 对默认的配置 进行修改

默认全局配置文件:
	application.properties  : k=v,或行内写法(k: v,[Set/List/数组] {map,对象类型的属性},并且 []可省,{}不能省)
	application.yml  :  yaml ain't myarkup language ,不是一个标记文档
	注意:1. k:空格v   2.通过垂直对齐 指定层次关系	3.默认可以不写引号; ""会将其中的转义符进行转义,其他不会

在这里插入图片描述
当debug=true时运行
在这里插入图片描述

创建
application.yml
在这里插入图片描述
在这里插入图片描述

Spring Boot使用“习惯优于配置”的理念让我们的项目快速运行起来,我们可以不用或者只需要很少的配置就能创建一个独立运行、准生产级别的基于Spring框架的项目。 我们不禁要问,这么一个优秀的框架,是不是在企业开发中就已经足够了,如果是,那么为什么像BAT这些大公司还要研发自己的交易框架,当然这里面除了核心技术之外,还有两个比较重要的原因: 第一:像SpringSpring Boot这些开源框架固然很优秀,但却不满足这些大公司对框架的功能要求,如spring scheduler就没有分布式调度能力,阿里研发了自己的tbschedule,以及后来的schedulerx; 第二:开源框架可以解决具体的领域问题,比如持久化框架Mybatis,RPC框架Dubbo,但是面对业务流程的开发却不是它的强项,以此就诞生了SSM,以及后来的Spring MVC。 放眼整个java开源世界,不管是功能问题还是业务流程开发问题都有对应框架和组件能满足我们的需求,只要我们的视野足够开阔,能有效的去整合开源组件,足以应付日常的开发。当然我们很难写出像SpringSpring Boot、Mybatis这些优秀的框架,但是我们可以在这个基础之上,进行整合,甚至二次开发,形成公司自己的功能组件或者交易开发框架。 不客气的说,开源框架的底层少不了spring的身影,那么可以肯定在Spring Boot推出以后,开源框架势必会以Spring Boot作为底层平台进行二次改造,这是趋势,也是必然。本课程顺应潮流,以Spring Boot作为基础平台,充分发挥其特性,抽象业务流程,整合开源组件,降低开发难度,打造出一个功能强大的交易开发框架,简洁,优雅,好用。 本课程有如下技术特色: 第一:充分使用Spring Boot的自动装配、条件注解,以及各种使用技巧; 第二:使用注解@Transaction抽象业务流程,简化交易的定义和执行方式,比SpringMVC更符合业务流程的开发(当然SpringMVC很强大,无贬低之意) 第三:为使交易具备RPC能力,使用泛化方式集成Dubbo,其好处是服务端不再需要提供接口给客户端使用,简单、高效; 第四:使用nacos作为服务注册中心,也支持zookeeper; 第五:为使交易具备Http能力,在Spring MVC的基础上提供HandlerMapping、HandlerAdapter。 。。。 一切尽在代码中
概要介绍: 本课程主要是介绍并实战一款java中间件~redisson,介绍redisson相关的核心技术栈及其典型的应用场景,其中的应用场景就包括布隆过滤器、限流器、短信发送、实时/定时邮件发送、数据字典、分布式服务调度等等,在业界号称是在java项目里正确使用redis的姿势。本课程的目标就在于带领各位小伙伴一起学习、攻克redisson,更好地巩固自己的核心竞争力,而至于跳槽涨薪,自然不在话下!  课程内容: 说起redisson,可能大伙儿不是很熟悉,但如果说起redis,想必肯定很多人都晓得。没错,这家伙字如其名,它就是架设在redis基础上的一款综合性的、新型的中间件,号称是java企业级应用开发中正确使用redis的姿势/客户端实例。 它是架设在redis基础之上,但拥有的功能却远远多于原生Redis 所提供的,比如分布式对象、分布式集合体系、分布式锁以及分布式服务调度等一系列具有分布式特性的对象实例… 而这些东西debug将在本门课程进行淋漓尽致的介绍并实战,除此之外,我们将基于spring boot2.0搭建的多模块项目实战典型的应用场景:对象存储、数据字典、短信发送、实时/定时邮件发送、布隆过滤器、限流组件、分布式服务调度....课程大纲如下所示: 下面罗列一下比较典型的核心技术栈及其实际业务场景的实战,如下图所示为redisson基于订阅-发布模式的核心技术~主题Topic的实际业务场景,即实时发送邮件: 而下图则是基于“多值映射MultiMap”数据结构实战实现的关于“数据字典”的缓存管理: 除此之外,我们还讲解了可以与分布式服务调度中间件dubbo相媲美的功能:分布式远程服务调度,在课程中我们动手搭建了两个项目,用于分别充当“生产者”与“消费者”角色,最终通过redisson的“服务调度组件”实现服务与服务之间、接口与接口之间的调用!  课程收益: (1)认识并掌握redisson为何物、常见的几种典型数据结构-分布式对象、集合、服务的应用及其典型应用场景的实战; (2)掌握如何基于spring boot2.0整合redisson搭建企业级多模块项目,并以此为奠基,实战企业级应用系统中常见的业务场景,巩固相应的技术栈! (3)站在项目管理与技术精进的角度,掌握对于给定的功能模块进行业务流程图的绘制、分析、模块划分、代码实战与性能测试和改进,提高编码能力与其他软实力; (4)对于Java微服务、分布式、spring boot精进者而言,学完本课程,不仅可以巩固提高中间件的实战能力,其典型的应用场景更有助于面试、助力相关知识点的扫盲! 如下图所示: 关键字:Spring Boot,Redis,缓存穿透,缓存击穿,缓存雪崩,红包系统,Mybatis,高并发,多线程并发编程,发送邮件,列表List,集合Set,排行榜,有序集合SortedSet,哈希Hash ,进阶实战,面试,微服务、分布式 适用人群:redisson学习者,分布式中间件实战者,微服务学习者,java学习者,spring boot进阶实战者,redis进阶实战者
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页