Spring Boot 核心简单分析




前言

       学习了Spring之后,我们感受到了Spring的高效的开发模式,但是也感受到了Spring繁琐的配置,需要大量的繁琐的配置,各种Config类的书写,尤其涉及到跟别的框架整合的时候,配置还是太过复杂和繁琐,总的来说,Spring的优点是不可否认的,但是其配置繁琐,也让许多程序员深受其害,总而言之,Spring的组件虽然是轻量级的,但是配置却是重量级的。所以顺应天意,有了Springboot的问世,解决了大多数程序员们的繁琐配置的问题。

        SpringBoot对于初级程序员来说提供了非常好的体验,但是还是建议初学者们,先要有SSM的基础,再来体验Springboot的快捷,因为Springboot是提倡“约定大于配置”,你首先得自己了解配置,才能知道这些约定,然后去使用,不然一旦碰到问题是很难自己解决的,我刚学完SpringBoot入门最大的感受就是,原来Spring还可以这么玩,这样是真的省去了很多繁琐的配置,尤其是在跟别的框架整合的时候,SpringBoot给了你一种神清气爽的感觉,下面我们来聊一聊我对SpringBoot的感受




一、SpringBoot的特点

  • 可以使基于spring开发的效率更快
  • 不需要XML配置,可以自己修改默认值配置
  • 提供了一些大型项目中常见的非功能性特性,比如嵌入式服务器、健康监测、外部配置等。



二、SpringBoot的核心

  • 起步依赖:

        起步依赖就是将具有某种功能的依赖坐标打包到一起,提供一些默认的功能,当我们需要新的功能时,只需要导入对应的starter就可以了。

  • 自动配置

        在SpringBoot中集成了一些常见的容器,或者说是组件,可以直接运行,从入口进入,SpringBoot自动完成配置



1.起步依赖原理:

        SpringBoot有了之后,我们就不用花以前那么长的时间去准备依赖文件了,SpringBoot已经给了你启动坐标,里面有要继承的项目,定义了若干个坐标版本号,(依赖管理,非依赖),用来减少依赖冲突的目的。

我们随便找一个SpringBoot的项目,打开他的pom文件,就可以看到如下坐标:

这就是配置了项目所依赖的父工程,每一个SpringBoot的项目必须要进行继承。

然后我们点进去看一下:

        然后我们看到了这两个重要的内容,上面那个是又继承了另一个工程,下面是约定了配置的路径

我们继续进到spring-boot-dependencies内

         我们就可以看到里面有相当多的版本的控制,这也就是说明了为什么我们只需要注入starter,他就可以自动帮我们导入这么多需要的依赖了。



2.自动配置的原理

         我们每次创建SpringBoot的工程时会发现,自动创建了一个入口,这个类我们称为引导类,也称为启动类。

        我们看到了@SpringBootApplication这个注解,这个注解是SpringBoot的核心,他标识了这个类是SpringBoot的引导类,也标识开启了SpringBoot的自动配置,然后我们点击进去。

         在里面我们看到了熟悉的注解,@SpringBootConfiguration在Spring纯注解配置中用来标识Spring配置引导类的,@ComponentScan其实它也是对应Spring纯注解配置,用来指定开启注解扫描的位置(值得一提的是,SpringBoot默认扫描的是启动类所在的包以及他的子类包,而很多同学可能就会保留着SSM的习惯,喜欢将启动类放入到Config的包下,这样会导致SpringBoot扫描不到,解决方案就是在启动上再加入扫描包,但是这个工作完全没有必要,因为官方也是推荐直接将启动类放到路径下),还有一个就是@EnableAutoConfiguration,它是SpringBoot特有的,从字面意思就可以看出来是开启自动配置的意思,它的实际功能也确实如此,只有当这个注解存在时SpringBoot才会帮你完成自动配置,下面我们来看看这个注解,我们点进去。

        我们看到了这个类上面又有两个注解,来解释一下,@AutoConfigurationPackage是用来管理自动配置类的,可以先不看,先看@Import,这个注解在Spring纯注解配置当中也使用过,它的作用是导入另外一个配置类,这里导入了一个叫做AutoConfigurationImportSelector的配置类。然后我们进去看一下 AutoConfigurationImportSelector这个。

 

         打开之后,我们发现里面信息量极大,而且有很多看不懂的,但是没关系,我们只找我们需要的东西找到这个然后找到getCandidateConfigurations

         这个是表示获取配置的集合,找到这个方法后,我们就可以找到他当前包下面的META-INF/spring.factories.这个文件

有两种方式去找,一种是直接找到这个package

一种是点击IDEA的这个箭头,可以直接定位到该类的位置。

 然后我们找到了这个文件,我们进去看一看

        我们可以看到里面有很多很多的键值对,所以自动配置就是读取了这个文件的信息。我们都知道,如果springboot不指定端口默认监听的是8080。我们可以看一下它这个是在哪里自动给我们配置的。 

        在这个文件中,我们找到ServletWebServerFactoryAutoConfiguration

然后我们继续打开这个类 

 然后发现这里又引进了ServerProperties.class我们点进去继续看

 这里面就定义了很多跟tomcat服务器有关的属性,上面有一个@ConfigurationProperties注解的属性中有一个prefix = "server",这个其实就是对应配置文件中的前缀,那么配置文件在哪呢,我们继续回到spring.factories同级的目录下,会发现如下的一个json文件:

        打开这个文件

        在这个.json文件中,可以找到跟刚才相关的配置,也就是说,这个json文件里面的值,就是SpringBoot自动配置时帮我们配置的值,如果我们需要更改这些配置,只需要在我们的配置文件中配置一下就行了,就会覆盖这里的默认配置,而使用我们的自定义配置。

总结一下:其实所谓自动配置,就是通过配置类去读取org.springframework.boot.autoconfigure下的META-INF下的spring.factories 文件的。




总结

        以上就是对SpringBoot核心的简单分析,虽然分析得比较浅薄,但是对于初学者想初步了解SpringBoot自动配置过程来说,这种深度恰到好处。等以后熟练了,我会继续的向底层进一步的挖掘。

        这是第一次写博客,感觉很深刻,虽然内容不是很难,但是一个个字敲出来,表达出来的时候,让自己对知识点又进一步的理解,让自己也更加的深刻。

        程序员这条路不好走,喜欢就坚持吧,保持一颗热爱的心!

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值