• spring boot2.0一看就会的超详细快速入门(四)-自动配置原理


    在springboot主程序类中,有一个非常重要的注释@SpringBootApplication,Springboot运行这个类下的main方法启动springboot应用,如下:

    按住键盘上Ctrl键,用鼠标点击这个注释,可以看到这个注释启用了三个注释功能:

    1.@SpringBootConfiguration:允许在上下文中注册额外的bean或导入其他配置类

    2.@EnableAutoConfiguration:启用Spring Boot的自动配置机制

    3.@ComponentScan:启用组件扫描功能

    简单来说,就是@SpringBootApplication是一个组合注解,相当于使用@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个注释与它们的默认属性,如下图:

     @SpringBootConfiguration :SpringBoot配置类,与@Configuration注解作用一样,将当前类内声明的一个或多个以@Bean注解标记的方法的实例放入到spring容器中,实例名就是方法名,相当于Spring中的配置文件

    
    

    说明: @*Configuration表示xx配置类,点击@SpringBootConfiguration代码分析,如下图:

    同时需要说明一下,配置类也是Spring容器中的一个组件,我们可以按住键盘上的Ctrl键,用鼠标点@Configuration打开代表跟踪如下图:

    @EnableAutoConfiguration也是一个组注解,我们按上述同样的方法打开代码跟踪。如下图所示:

     @AutoConfigurationPackage:包自动配置,跟踪代码发现就是由一个@import注释,如下图:

    通过跟踪发现, @AutoConfigurationPackage注解使用的Spring底层注解@Import,给容器导入一个组件,导入的组件由AutoConfigurationPackages.Registrar类处理导入,按住键盘Ctrl键,用鼠标点击Registrar类名,可以看到如下图所示代码结构:

    我们在Registrar方法中的第129行处打下断点,对register方法进行跟踪调试,运行项目调试程序,如下图所示:

    依次点击introspectedClass我们可以看到@SpringBootApplication标注所在类为SpringApplicationStart,如下图所示:

    为了测试得到导入的包名,我们把new PackageImport(metadata).getPackageName()),复制到调试窗口中的Expressions标签页,点击Add new expression,在name中粘贴new PackageImport(metadata).getPackageName()),回车即可在Value中看到导入的包名com.goldCup.boot.main,如下图:

    通过调试我们可以知道:@AutoConfigurationPackage注释的作用就是将主配置类所在的包下面所有的组件都扫描到Spring容器中。

    @EnableAutoConfiguration还有另一个@Import注释,跟据字义,我们可以理解为导入组件选择器自动配置,作用是将需要导入的组件以全类名的方式返回,这些组件将被添加到Spring容器中,如图:

    自动配置类的作用,配置注入功能组件自动完成。

    SpringBoot在启动的时候从自动配置类路径下的META-INF/spring.factorles中获取EnableAutoConfiguration指定的值,并将这些值作为自动配置类导入到容器中,自动配置类就生效,如下图:

  • 相关阅读:
    Java 处理 multipart/mixed 请求
    SpringBoot 动态更新 resources 目录的文件
    dubbo 2.7.0 中缺乏 <dubbo:annotation /> 的解决方案
    设计模式 — 终章.
    代理模式
    状态模式.
    第七节、双目视觉之空间坐标计算
    第六节、双目视觉之相机标定
    经典项目博客集合
    第五节、轮廓检测、直线和圆、多边形检测
  • 原文地址:https://www.cnblogs.com/henianxi/p/9950406.html
Copyright © 2020-2023  润新知