粉丝1.4万获赞15.7万

今天威哥给大家解析一道源自阿里一面的面试题,说说 supreme boot 的自动配置原理。接下来我们就开始解析这个面试题。在说 supreme boot 的自动配置原理之前,我们要先说明白什么是自动配置。 在传统的 supreme 应用开发过程中,如果需要整合第三方框架,我们首先需要引入该框架的依赖包,并配置一些特定的属性值和编对象,这个过程是繁琐且重复的,而且第三方框架也是众多的。而使用了 supreme boter 之后,这些编对象就不需要我们在手工配置了, supreme boot 已经帮我们自动完成了这个配置工作,这就是所谓的自动配置。在我们创建 supreme boot 应用时,会默认引入一个 supreme boot 鳌头 config 的价包,该包下提供了大量的自动配置类。当然我们也可以定义自己的自动配置类。如果只是少数的自动配置类,我们完全可以直接使用 input 注解完成导入。而众多的 互动配置类又是怎么被自动加载到 spring 容器之中的呢?这中间就使用到了我们所熟知的 spi 机制,它和我们今天要说的 supreme boot 的自动配置原理是息息相关的。我们知道 supreme boot 应用通常会有一个命名为某某 application 的应用类,或者叫做入口类, 该类的满法法中会调用 spring application 的软方法来启动整个应用。注意, spring application 的软方法的第一个参数需要传入一个配置类,它可以是启动类自身,也可以是其他类,但是必须要是一个使用 spring bo 的 application 注解声明的类。 要了解 supreme boot 的自动配置原理,就要从这个 supreme boot application 注解说起,它是一个组合注解,主要包含 supreme boot configuration、 emo, auto configuration, component scan 等几个注解,而 supreme boot 的自动配置就是通过 amo auto configuration 注解实现的。 在 spring 框架中,以 ample 开头的注解通常都是采用 import 注解导入特定的类到 spring 容器中,而 import auto configuration 也是一样,它会导入一个 auto configuration import selector 类。 接下来让我们看一下 auto configuration import select 类,因为该类实现了 default import select 接口,并实现了 get import group 方法,所以该类不会直接调用其 select impulse 方法,而是会去一次调用其静态内部类的 auto configuration group 的 process 方法和 auto configuration group 的 select impulse 方法、 auto convicturation google process 方法和 auto convicturation gouruple select impose 方法的原码因为代码量较多就不在笔记中体现了,有兴趣的小伙伴可以自己去研究一下。虽说不体现 该原码的内容,但是接下来的代码逻辑才是重点,让我们总结一下。一、获取后选的自动配置类 spring boot 二点七版本之前主要是通过调用 spring 三点二版本提供的工具类 spring fight trace load 的 low 的 factory names 方法去读取 class pass 下的 mate 杠引爆下的 supreme, 点 factories 文件,并匹配 k 为 o r g, 点 supreme frame work, 点 bottle, 点 auto config, 点 emble auto config ration 的值。 而在 springboard 二点七及以后的版本,则会直接一行行的读取 class pass 下的 买大杠引爆下的 spring 文件夹下的 o r g, 点 spring form walk, 点 bot, 点 auto configer, 点 auto compulation, 点 empose 文件,该文件保存的就是所有的自动配置类。 二、筛选本项目需要的自动配置类,先将获取到的所有的自动配置类进行去除、排除等操作,然后进行关键的过滤操作。其中过滤操作的核心思想就是通过 connectional on class, connectional on property 等注解完成的。 简单来说就是判断如果项目中是否存在自动配置类指定的某些关键的类,或者是否配置某些特定的属性,如果不存在就会被过滤掉。三、导入筛选后的自动配置类到 spring 容器 当然,自动配置类中的宾能否被注册还需要看宾的条件注解是否满足。 spring bott 的自动配置是在 spring bot 应用启动过程中的 spring 容器启动过程中进行的。 最后我们对 spring bott 的自动配置原理做一下总结。一、 spring bot 应用启动加载主配置类, 主配置类声明了 embol autocomplication 注解,而该注解又导入了一个 autocomplication input select 类。二、 auto compulation input select 类实现的代码逻辑如下,一、 获取候选的自动配置类 supreme bo 的二点七版本之前会从 supreme 点 factory 是文件中读取,而 supreme bo 的二点七及之后的版本则是读取埋达钢印炮下的 supreme 文件夹下的 o r 机,点 supreme 否尔默克,点 bot, 点 auto config, 点 auto config recent, 点 in pose 文件。接着筛选本项目中需要的自动配置类,最后导入筛选后的自动配置类到 spring 容器。接下来的拓展知识部分, 威哥整理了 default import selector 和 import selector 的区别,有兴趣的小伙伴可以自行参考笔记,小伙伴们关注威哥,更多精品内容持续与你分享!


今天给大家演示一个宠物领养管理系统,这个系统是我昨晚通宵造成的,系统基于 spring boot 加 view 开发,数据库用的是 mysql, 同时提供了 idea 和 eclipse 两种版本。这里以 idea 为例,打开 idea 工具开 选择 fire, 然后选择欧本来打开这个项目源码,打开源码后需要配置扎物管理和编译器,版本 都选择 job 八,之后在项目中找到 application emo 文件,这是项目的配置文件,数据库连接信息就是在这里配置的, 用户名密码需要改成和自己数据库相同的,然后把数据库名复杂到 navicate, 争取创建一个同名的数据库。创建之后还需要运行一下数据库脚, 把表和数据初始化一下,数据库脚本也在项目文件中。准备工作都做完之后,就可以启动项目了。 首先找到这个启动类,然后右键选择 run 来启动后端项目,注意查看控制台,如果没有异常信息输出就是启动成功了。后端启动成功之后还需要启动前端 view 工程。 进入前端项目目录下输入 c m d, 打开命令行,在命令行输入 m p m run dev 来启动前端。 启动成功之后会出现访问地址,打开谷歌浏览器,输入刚刚出现的地址,就可以进入宠物管理系统的登录页面。先登录管理员账号,管理员具有后端管理功能,鼠标移动到右上角管理员处会出现下拉 菜单,点击进入后台管理系统。后台管理系统除了业务功能以外,还包含用户管理、角色管理、菜单管理等基础功能。业务功能主要是宠物管理、绝育管理、流浪动物救助、宠物走失登记、喂养管理、 领养管理等等。此外还包括论坛、帖子等功能。最后再演示一下用户端的操作,输入用户为相塞密码幺二三四五六,登录之后是用户端首页,首页展示公告列表、宠物科普、流浪宠物 评论等等信息列表。点击宠物领养页签后进入宠物领养页面,在这里可以领养自己心仪的宠物,领养的时候需要填写姓名、电话等基础信息。另外,宠物走失救助和论坛功能我就不一一讲解了。
