今天,让我们谈谈Springboot自动配置的原理。在我们以前的Web项目开发过程中,配置文件配置很麻烦。如果将其与多个框架集成在一起,则可以维护多个配置文件。这将花费大量时间来维护配置文件。如果添加了一个小功能,则可能需要复杂的配置。跳跃机后,这种情况会大大改善。即使我们使用默认配置,我们也无需花费时间来用于这些配置文件,而是关注应如何实现我们的业务功能。
Springboot如何执行如此多的配置项目,这些项目在我们以前的配置项中未看到效果的效果?首先,让我们首先创建一个Web项目。通过IDEA工具,我们可以直接创建一个可以运行的Web项目。我不会在这里证明它。创建完成后,有这样的目录结构,并且有一个默认的启动类。
开始主题;Springboot自动配置主要依赖于启动类中的@springbootapplication,我们单击此注释,您可以看到
自动配置原则:
Springboot启动后,将加载主配置类,并打开自动配置功能;
影响:
在容器中使用一些组件;我们可以单击以查看他的底部是如何实现的;如图所示
你可以看到;继续指出,我们将在课堂上看到该方法;
您可以看到SpringFactoriesLoader类中已完成了哪些操作;
将所有在元I-Inf/spring.factories中配置的值添加到容器中;
您可以看到自动配置类为我们做了什么;我发现我们经常使用Springboot的基础知识认为我们已将配置添加到容器中。这些配置类具有一个共同的功能,即通用功能是结束时结束。每种自动配置都是通过配置类将配置加载到容器中。如果我们熟悉SPING配置,我们知道当要使用某个功能时,我们还将特定配置配置为Spring容器。这是这里的Springboot。我们自动配置了我们。
Springboot的自动配置如何?我们可以根据需要自定义配置?让我们看一下如何实现此自动配置。如果我们自己编写,如何自定义配置。
首先,我们需要熟悉两个注释:
1. @component //将POJO对象注入容器中,即每个属性值的值映射到容器中
2. @configurationProperties //告诉SpringBoot将此类别中的所有属性与此类别中的相关配置绑定;prefix =“”:配置文件中的所有以下所有属性都一一最大化,以一个一个一个一个逐一最大化,以一个一个一个一个一个逐一的最大化,以一个一个一个一个一个逐一的最大化,以一一一个一个一个一个一个。
我以一个小例子来说明这两个注释的作用。我们通过配置文件的形式读取配置文件中的属性值(也就是说,解释为什么我们在配置文件中配置属性值之后);
首先,我们看到两个物理课,一个猫班,一个人班。
然后在配置文件中,我们将值分配给这些属性,然后通过这些类的对象分配,以查看是否可以在配置文件中获取这些属性的值;
配置文件application.yml(SpringBoot的默认配置文件是应用程序。Properties&Application.yml)两个Springboot已确定,但是此处使用的.yml的配置;详细的YML语法可以在线检查信息。我不会在此处一一详细介绍,以下是通过配置文件的物理类属性的值;
作业完成后,我们必须采用该值。在这里,我们使用项目自动生成的测试类别来打印我们这一代的价值;
我们通过@ConfigurationProperties进行注释。前缀属性的配置注释可以在配置文件中成功读取并将其注入容器中;
接下来,让我们看一下如何获得Springboot的这些自动配置;首先,我们仍然找到一个自动配置类,因为每个配置类都是这样实现的,所以我们只是在配置类中找到一个。
在这里,我们没有找到其他东西来完成Web项目所需的调度员的配置。如果您熟悉SpringMVC框架,并使用SpringMVC框架开发,则应是DispatcherServ的配置;我们为我们做到这一点;
首先找到这个课程;
拦截部分,所有的拦截都太多了。我们可以看到,此自动配置类有很多注释。您可以看到特定的角色:
@AutoconFigureOrder(orded.highes_preedence)
@配置
@conditionalonwebapplication(type = type.servlet)
@ConditionAlonClass(dispatcherservlet.class)
@autoconfigurealate(ServiceTwebServerFactoConfigution.Class)
@enableconfigurationProperties(serverproperties.class)
首先,第一个@AutoConfigureOrder(orded.highes_preedence)。如果您熟悉以前的SpringMVC配置,则此配置可能知道它的含义。我们以前的配置的顺序如下。值越小,优先级越高,将优先级加载(概念是优先级):
也就是说,当我们具有相同的配置时,我们价值的值越小,优先级越高,
第二个注释@configuration,我们都应该知道这是一个配置类。之前编写的配置文件还可以将组件添加到容器中;
第三个注释弹簧的基础注释。根据不同的条件,如果满足指定条件,则整个配置类中的配置将生效;确定当前应用程序是否为Web应用程序,如果是Web应用程序,当前的配置类将有效
第四个注释:目前是否有某个类别,这是dispatcherservlet.class,是否有dispatcherservlet类,如果有此配置文件,它将生效。
第五注释:定义这些配置类的负载顺序。
*关注第六个注释:启动指定类的功能;将配置文件中的相应值绑定到ServerProperties;并将ServerProperties添加到IOC容器中;
这是什么意思?我们可以看到它是如何实现的。此处配置类的属性是我们配置的某些服务信息的配置;端口,地址等;
我切断了部门,我可以看到这是我们之前所做的小测试。如何在配置文件中读取参数值是 @configurationProperties的使用。属性名称是我们配置的特定属性。
而且我们的DispatcherServlet配置与DispatcherServletAutoConfiguration的自动配置类有关,MVC配置在哪里,我们可以看到特定的方法;如果选择一个,则该方法用于配置MVC配置; duan代码,为了更清楚地知道,我们撤出并说;
查看此类@enableconfigurationProperties(webmvcproperties.class),webmvcproperties.class的配置文件;课堂中的特定属性;
仅拦截零件;请参阅我们之前使用的这些配置,这里有相应的属性。他通过configurationProperties.mvc的形式读取配置文件中的属性值。properties =值分配配置文件属性;
总结:
1)Springboot将加载大量自动配置类
2)我们查看我们需要的功能是否是SpringBoot默认自动配置类;
3)让我们看看在此自动配置类中配置了哪些组件;(只要我们使用使用的组件,我们就不需要再次配置)
4)当将自动配置类添加到容器中时,将从属性类获得一些属性。我们可以在配置文件中指定这些属性的值;
XXXXAUTOCONFIGURARTION:自动配置类;将组件添加到容器中
xxxxproperties:软件包配置文件中的相关属性;
Springboot的自动配置极大地简化了我们的配置过程,使我们能够专注于业务发展。
