0%

springboot

关于springboot

  • Springboot

    1. 自动装配原理:

      • pom.xml

        • spring-boot-dependencies:核心依赖在父工程中
        • 在引入spring-boot依赖的时候,不需要指定版本,因为有版本仓库的存在
      • 启动器

        • <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter</artifactId>
          </dependency>
          
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15

          + 启动器说白了就是spring-boot的启动场景,什么时候用什么时候引入;如 `spring-boot-starter-web`就会自动导入web环境所需的所有依赖。而**spring-boot会将所有的功能场景变成一个一个的启动器**

          + **主程序**

          + ```java
          @SpringBootApplication
          //@SpringBootApplication来标注一个主程序类
          //说明这是一个Spring boot应用
          public class ManageApplication {
          //将spring-boot应用启动
          public static void main(String[] args) {
          SpringApplication.run(ManageApplication.class, args);
          }
          }
        • 注解分析:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          @Target(ElementType.TYPE)
          @Retention(RetentionPolicy.RUNTIME)
          @Documented
          @Inherited
          @SpringBootConfiguration
          @EnableAutoConfiguration
          @ComponentScan(excludeFilters = {
          @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
          @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
          public @interface SpringBootApplication {

          @AliasFor(annotation = EnableAutoConfiguration.class)
          Class<?>[] exclude() default {};
          @AliasFor(annotation = EnableAutoConfiguration.class)
          String[] excludeName() default {};
          //根据包路径扫描
          @AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
          String[] scanBasePackages() default {};
          //直接根据class类扫描
          @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
          Class<?>[] scanBasePackageClasses() default {};

          }

          初看@SpringBootApplication有很多的注解组成,其实归纳就是一个”三体”结构,重要的只有三个Annotation:

          1
          2
          3
          @Configuration(@SpringBootConfiguration实质就是一个@Configuration)
          @EnableAutoConfiguration
          @ComponentScan
          • @Configuration实际上就是代表了一个配置类,相当于一个beans.xml文件

          • @ComponentScan的功能其实就是自动扫描并加载符合条件的组件或bean定义,最终将这些bean定义加载到容器中

          • @EnableAutoConfiguration作用就是从classpath中搜寻所有的META-INF/spring.factories配置文件,并将其中org.springframework.boot.autoconfigure.EnableutoConfiguration对应的配置项通过反射(Java Refletion)实例化为对应的标注了@Configuration的JavaConfig形式的IoC容器配置类,然后汇总为一个并加载到IoC容器。这些功能配置类要生效的话,会去classpath中找是否有该类的依赖类(也就是pom.xml必须有对应功能的jar包才行)并且配置类里面注入了默认属性值类,功能类可以引用并赋默认值。生成功能类的原则是自定义优先,没有自定义时才会使用自动装配类。

            所以功能类能生效需要的条件:

            1. spring.factories里面有这个类的配置类(一个配置类可以创建多个围绕该功能的依赖类)

            2. pom.xml里面需要有对应的jar包

**总结:**

1、SpringBoot启动会加载大量的自动配置类

2、我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;

3、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)

4、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;

**xxxxAutoConfigurartion:自动配置类;**给容器中添加组件

**xxxxProperties:封装配置文件中相关属性;**
-------------本文结束感谢您的阅读-------------