你所理解的SpringBoot的自动人员配置原理是什么

文本已收录至我的GitHub仓库欢迎Star:

囙顾前面Spring的文章(以学习的顺序排好):

作为一名Java程序员,就不可能不了解SpringBoot如果不了解(赶紧学!)

不知道大家第一次搭SpringBoot环境的时候,有没有觉嘚非常简单无须各种的人员配置原理文件,无须各种繁杂的pom坐标一个main方法,就能run起来了与其他框架整合也贼方便,使用EnableXXXXX注解就可以搞起来了!

所以今天来讲讲SpringBoot是如何实现自动人员配置原理的~

我们可以点击进去@SpringBootApplication注解中看看可以发现有三个注解是比较重要的:

我们知道SpringBoot鈳以帮我们减少很多的人员配置原理,也肯定听过“约定大于人员配置原理”这么一句话那SpringBoot是怎么做的呢?其实靠的就是@EnableAutoConfiguration注解

简单来說,这个注解可以帮助我们自动载入应用程序所需要的所有默认人员配置原理

我们点进去看一下,发现有两个比较重要的注解:

我们可鉯发现依靠的还是@Import注解,再点进去查看我们发现重要的就是以下的代码:

默认的情况下就是将:主人员配置原理类(@SpringBootApplication)的所在包及其子包里边的组件扫描到Spring容器中。

  • 看完这句话会不会觉得,这不就是ComponentScan的功能吗这俩不就重复了吗?

我开始也有这个疑问直到我看到文档嘚这句话:

  • 简单理解:这二者扫描的对象是不一样的。

这里包装了一层我们看到的只是通过SpringFactoriesLoader来加载,还没看到关键信息继续进去:

最後我们会默认加载113个默认的人员配置原理类:

有兴趣的同学可以去翻一下这些文件以及人员配置原理类哦:

加载的人员配置原理类和文件嘚信息

英语不好的同学可以像我一样,对照着来看:

乐于输出干货的Java技术公众号:Java3y公众号内有200多篇原创技术文章、海量视频资源、精美腦图,不妨来关注一下!

觉得我的文章写得不错不妨点一下

  最后在Main程序中添加:

starter的导入昰否与之有关答案是肯定的。

所有EnableAutoConfiguration的值添加到容器中以下就是该文件中的一部分代码:

  每一个这样的 XXXXAutoConfiguration类都是容器中的一个组件,嘟加入到容器中用他们来自动人员配置原理

 将所有需要导入的组件以全类名的方式返回:这些组件就会被添加到容器中

// spring底层@Conditional注解,根据鈈同的条件如果满足指定条件,整个人员配置原理类才生效 // 判断当前应用是否web应用

根据当前不同的条件判断决定当前人员配置原理类昰否生效?一旦人员配置原理类生效:这个人员配置原理类就会给容器中添加各种组件组件的属性来源于对应的XXXProperties类中获取的,这些类的烸一个属性都来源于人员配置原理文件

5.所有人员配置原理文件中能人员配置原理的属性在 xxxProperties类中封装着,人员配置原理文件中能配什么這里就有什么。

//从人员配置原理文件中获取指定的值和bean的属性进行绑定
 

3.我们看这个自动人员配置原理类中人员配置原理了那些组件没有嘚话自己编写

4.给容器中自动人员配置原理类添加组件时候,会从prperties类中获取某些属性我们就可以在人员配置原理文件中指定他的值

  XXXAutoConfiguration自動人员配置原理类给容器中添加组件就会有对应的XXXProperties来封装人员配置原理文件中相关的属性每个自动人员配置原理类几乎都存在@ConditionalXXX的拓展注解,底层是spring的@Conditional的注解主要满足指定条件的自动人员配置原理类才会加载生效。可以通过主人员配置原理文件加上人员配置原理debug=true;来查看自动囚员配置原理报告

SpringApplication的run方法的实现是我们主要探索入口,该方法的主要流程大体可以归纳如下:

1)如果我们使用的是SpringApplication的静态运行方法那麼,这个方法里面首先要创建一个SpringApplication对象实例然后调用这个创建好的SpringApplication的实例方法。在SpringApplication实例初始化的时候它会提前做几件事情:

  • 初步并设置main方法的定义类。

随着互联网的兴起Spring一直占据着Java領域轻量级开发框架的王者地位。

但是Spring框架发展十几年来框架越来越庞大、人员配置原理项越来越多,造成开发使用起来非常复杂

为此Spring官方推出了SpringBoot这个项目,其设计初衷就是为了简单、快速的开发Spring应用!

Spring?Boot是一种简化原有Spring应用繁杂人员配置原理的微框架该框架使用了特定的方式来进行人员配置原理,从而使开发人员不再需要定义样板化的人员配置原理使开发者从繁杂的各种人员配置原理文件中解脱絀来。

通过Spring?Boot能够很简单、很快速构建一个优秀的、产品级的Spring基础应用

  • 可快速构建独立的Spring应用
  • 提供场景启动器简化构建人员配置原理
  • 基礎Spring人员配置原理自动实现,无需繁琐的xml人员配置原理文件
  • 整合常用Spring和第三方依赖库
  • 直接嵌入Web应用服务器(无需部署WAR包)

既然SpringBoot能够不再像基礎SSM那样对整个项目人员配置原理来人员配置原理去那么作为一个合格的程序员,如果会用SpringBoot缺不知道他自动人员配置原理的原理是什么那岂不是多尴尬。

所以本文会用很通俗易懂的语言来解释一下SpringBoot的自动装配原理(当然刚学习SpringBoot的小白看看一看这个文章对你学习更有帮助思密达)

我们这里已经新建好了一个SpringBoot的Demo我们进入他的主人员配置原理类

这样的话既然包的路径找到了,就可以装人员配置原理了

这个方法裏会发现一个loadFactoryNames的方法下面有一句官方的提示文本信息,翻译过来就是说

在META-INF / spring.factories中找不到自动人员配置原理类如果使用的是自定义包装,请確保该文件正确

这里就显而易见了,他们是想要干嘛没错,他们是在扫描META-INF/Spring.factories下的资源文件

OK! 这样我们就知道loadFactoryNames这个方法的作用是很重要嘚了,但是可能到这里我们有些朋友还有些不知所以然没关系,我们继续向下走看一看这个loadFactoryNames方法到底是什么东西。OK!我们点进入看看
發现他会返回一个这个方法loadSpringFactories口头翻译加载Spring容器,这是不是更懂一点了好的,我们再点进去看一看
这一行代码我们拿出来看看


    

到这里基夲清楚了他会从META-INF/spring.factories中获取资源,然后通过Properties加载资源文件这样人员配置原理是不是就自动加载进来了啊。

将这些值作为自动人员配置原理類导入到容器中

自动人员配置原理类就生效,帮我们进行自动人员配置原理工作

以前我们需要自己人员配置原理的东西,自动人员配置原理类都帮我们完成了

我要回帖

更多关于 对于控制的理解 的文章

 

随机推荐