您的位置:首页 > 编程语言 > Java开发

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

2018-11-13 20:32 288 查看

 

 

 

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: