ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

springboot知识点总结

2022-08-29 09:04:15  阅读:174  来源: 互联网

标签:总结 知识点 依赖 springboot 配置 默认 引入 SpringBoot


原文地址:https://www.cnblogs.com/lidar/p/15913128.html

一、springboot总结
1、概述
springboot是一种快速使用spring框架的简便方式,springboot简单来说相当于一个程序搭建的脚手架,最大的作用就是能够帮助我们快速构建项目,并且尽可能的减少xml的配置文件,让程序的开发更加的简单,开箱即用,快速上手,让我们在程序开发的过程中能狗将更多的精力去关注到程序的业务逻辑,而并非是配置文件,总之,我为springboot总结了三个字,概括:轻(易配置,易通用,启动时间段),快,简

2、为什么要用springboot
因为在之前Java开发有一个特别大的痛点就是配置特别臃肿和麻烦,有时候当你在幸幸苦苦搭环境的时候,可能python程序员早已经将代码敲完了(年轻人不讲武德),主要就是原因就是以下两条:

1、复杂的配置

项目中的各种配置其实是开发时的一个损耗,程序员在开发过程中思维需要在项目配置和业务逻辑之间来回切换,所有的对程序员来时是一件比较头疼的事,在程序开发的过程中我觉得程序员因该把更多的时间和经历放在业务代码上,配置这些因该有时间私下悄悄研究

2、混乱的项目管理

项目中的依赖管理是一件非常难搞的事情,本来选择用哪些库就已将很头疼了,但是选择完依赖之后还得考虑版本冲突的问题,如果前期搞不好,后期可能出现致命的问题,并且在选择上面就是一种消耗,并且如果选择不对,后期的返工更是一个消耗,搞不好还会拉慢项目的进度,所有这个工作一般是公司的主程来搞。

综上,springboot就是解决了以上的问题,能够快速搭建一个开发环境,而且还没有那么多复杂的配置,并且可以对项目依赖进行一个很好的管理

3、springboot的特点
1、简易轻便,开箱即用,容易上手

2、快,环境搭建快,没有繁琐的配置,约定大于配置

3、提供了一些大型项目中常见的非功能性的特性,内嵌服务器,安全,指标,健康检测,等

以上大概就是springboot的主要的一些特点

4、springboot支持的配置文件类型
1、.properties(优先加载,和之前的一样,但是一般用后者)

2、.yml(采用缩进的方式,一般用这个,因为他可以放集合数组,并且比较清晰,容易阅读)

3、.yaml(同上)

5、springboot自动配置原理
springboot的有一个启动类,可以从这个启动类出发进行探究:

启动类上面有一个关键的注解:@SpringBootApplication,main方法中有一个run方法,springApplication.run(),

分开讨论一下:

1、**SpringBootApplication:**点击进入,可以看到有七个关键的注解:

@Target(ElementType.TYPE)注解在什么位置生效,ElementType.TYPE在类上
@Retention(RetentionPolicy.RUNTIME)什么时候生效,RetentionPolicy.RUNTIME运行时生效
@Documented 是否生成api文档
@Inherited 是否被继承
**@SpringBootConfiguration(点进去@Configuration)**声明了当前类为配置类,springboot会自动扫描到添加了@Configuration的类,并且读取了配置信息,@SpringBootConfiguration声明了当前类为springboot的配置类,springboot有一个,所以我们不需自己添加
@EnableAutoConfiguration是否引入了一些第三方库,如果引入了第三方库的一些依赖,这些配置生效,所以我们在构建了springboot项目后,如果想要引用第三方库,只需要导入相应的依赖,配置都交给springboot处理
@ComponentScan就是一个扫描包的作用,因为这个注解是加在springboot的启动类,所以扫描的包是在类同级的包以及子包,因此,一般启动类会放在一个比较前的包目录中。
触发自动配置:引入相应的starter依赖,引入条件特定的类,然后就会出发自动配置

6、默认配置原理
我们可以在SpringApplication.run的方法中跟进run方法,然后在跟进,然后在跟进SpringFactoriesLoader,最后找到spring.factories,因此,在springboot初始化的时后,加载所有的classpath:META-INF/spring.factories文件,而在Spring的一个依赖包:spring-boot-autoconfigure中,就有这样的文件,我们只要引入了第三方配置,都会有类似文件

@Configuration:声明这个类是一个配置类

@ConditionalOnWebApplication(type = Type.SERVLET)

ConditionalOn,翻译就是在某个条件下,此处就是满足项目的类是是Type.SERVLET类型,也就是一个普通web工程,显然我们就是

@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })

这里的条件是OnClass,也就是满足以下类存在:Servlet、DispatcherServlet、WebMvcConfigurer,其中Servlet只要引入了tomcat依赖自然会有,后两个需要引入SpringMVC才会有。这里就是判断你是否引入了相关依赖,引入依赖后该条件成立,当前类的配置才会生效!

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)

这个条件与上面不同,OnMissingBean,是说环境中没有指定的Bean这个才生效。其实这就是自定义配置的入口,也就是说,如果我们自己配置了一个WebMVCConfigurationSupport的类,那么这个默认配置就会失效!

总结
SpringBoot为我们提供了默认配置,而默认配置生效的步骤:

@EnableAutoConfiguration注解会去寻找META-INF/spring.factories文件,读取其中以EnableAutoConfiguration为key的所有类的名称,这些类就是提前写好的自动配置类
这些类都声明了@Configuration注解,并且通过@Bean注解提前配置了我们所需要的一切实例。完成自动配置
但是,这些配置不一定生效,因为有@ConditionalOn注解,满足一定条件才会生效。比如条件之一:是一些相关的类要存在
类要存在,我们只需要引入了相关依赖(启动器),依赖有了条件成立,自动配置生效。
如果我们自己配置了相关Bean,那么会覆盖默认的自动配置的Bean
我们还可以通过配置application.properties文件,来覆盖自动配置中的属性
1)启动器

所以,我们如果不想配置,只需要引入依赖即可,而依赖版本我们也不用操心,因为只要引入了SpringBoot提供的stater(启动器),就会自动管理依赖及版本了。

因此,玩SpringBoot的第一件事情,就是找启动器,SpringBoot提供了大量的默认启动器

2)全局配置

另外,SpringBoot的默认配置,都会读取默认属性,而这些属性可以通过自定义application.properties文件来进行覆盖。这样虽然使用的还是默认配置,但是配置中的值改成了我们自定义的。

因此,玩SpringBoot的第二件事情,就是通过application.properties来覆盖默认属性值,形成自定义配置。我们需要知道SpringBoot的默认属性key,非常多,可以再idea中自动提示
————————————————
版权声明:本文为CSDN博主「lbiti」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lbiti/article/details/109909819

每天多努力一点,你将会变得更好。

标签:总结,知识点,依赖,springboot,配置,默认,引入,SpringBoot
来源: https://www.cnblogs.com/eyesfree/p/16634712.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有