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

 

 

 

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

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

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

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

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

简单来讲,就是@SpringBootApplication是一个组合注解,至关于使用@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个注释与它们的默认属性,以下图:spa

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

 

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

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

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

 

 @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指定的值,并将这些值做为自动配置类导入到容器中,自动配置类就生效,以下图:

相关文章
相关标签/搜索