springboot知识点总结
⼀、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 是否被继承springboot框架是干嘛的
**@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版权协议,转载请附上原⽂出处链接及本声明。
原⽂链接:blog.csdn/lbiti/article/details/109909819
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论