SpringBoot自动装配

什么是SpringBoot

image.png
官网对SpringBoot的解释,简而言之就是,使用SpringBoot可以快速创建生产级别的Spring应用。

什么是SpringBoot的自动装配

如果没有SpringBoot的自动装配,如果需要启动一个第三方的服务,我们需要书写繁琐的配置文件,配置类。
而自动装配,只需要一个简单的引入依赖,之后通过启动 启动类的main方法 即可。
并且我们可以通过application的配置文件 自定义属性

SpringBoot如何实现自动装配

image.png
可以看到启动类上,只有一个注解 @SpringBootApplication
点击进入

image.png
发现这个注解是一个复合注解,除去上面4个元注解,重点是下面的两个注解
@SpringBootConfiguration
@EnableAutoConfiguration

先看 @SpringBootConfiguration

image.png
可以看到 这其实是一个 @Configuration 修饰的类

解释下 @Configuration
其实就是注入被修饰的类下的bean。
举个例子:

image.png
可以看到,我在启动类增加了一个@Bean 那么在启动的时候,就可以被注入到IOC容器中
小总结:第一个注解@SpringBootConfiguration 其实就是为了申明启动类也是个配置类,可以引入我们需要的bean

最后看重点@EnableAutoConfiguration

image.png
同样是个组合注解,先看@AutoConfigurationPackage

image.png
引入了 AutoConfigurationPackages.Registrar.class,是将该注解修饰的类所在的package作为自动配置的package来管理
当SpringBoot应用启动时默认会将启动类所在的package作为自动配置的package。
这也是为什么,我们会把SpringBoot的启动类,放在最外层包下。

image.png
点进@Import引入的Registar,注意第二个参数,new PackageImports

image.png
可以看到获取的是启动类所在包的包名

再看另一个注解@Import(AutoConfigurationImportSelector.class)

image.png
引入的AutoConfigurationImportSelector.class 很关键

image.png
看他的process方法

image.png
继续看getAutoConfigurationEntry方法

image.png
看getCandidateConfigurations方法

image.png
通过这句话,我们就可以判断出,其实AutoConfigurationImportSelector.class 就是读取META-INF/spring.factories下面的包路径,加载到容器中

image.png
找到这个spring.factories 会发现一共配置了130个类

image.png
随便抽取一个,去spring.factories中查找

image.png
发现就在这里

总结:

1.SpringBoot的自动装配 主要通过 @SpringBootConfiguration 和 @EnableAutoConfiguration
2. @SpringBootConfiguration 读取当前启动类所在包下的类 加入IOC容器,也可以自定义导入Bean
3.@EnableAutoConfiguration 通过扫描 spring.factories 下的130个类,自动注入IOC容器

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享