什么是SpringBoot
官网对SpringBoot的解释,简而言之就是,使用SpringBoot可以快速创建生产级别的Spring应用。
什么是SpringBoot的自动装配
如果没有SpringBoot的自动装配,如果需要启动一个第三方的服务,我们需要书写繁琐的配置文件,配置类。
而自动装配,只需要一个简单的引入依赖,之后通过启动 启动类的main方法 即可。
并且我们可以通过application的配置文件 自定义属性
SpringBoot如何实现自动装配
可以看到启动类上,只有一个注解 @SpringBootApplication
点击进入
发现这个注解是一个复合注解,除去上面4个元注解,重点是下面的两个注解
@SpringBootConfiguration
@EnableAutoConfiguration
先看 @SpringBootConfiguration
可以看到 这其实是一个 @Configuration 修饰的类
解释下 @Configuration
其实就是注入被修饰的类下的bean。
举个例子:
可以看到,我在启动类增加了一个@Bean 那么在启动的时候,就可以被注入到IOC容器中
小总结:第一个注解@SpringBootConfiguration 其实就是为了申明启动类也是个配置类,可以引入我们需要的bean
最后看重点@EnableAutoConfiguration
同样是个组合注解,先看@AutoConfigurationPackage
引入了 AutoConfigurationPackages.Registrar.class,是将该注解修饰的类所在的package作为自动配置的package来管理
当SpringBoot应用启动时默认会将启动类所在的package作为自动配置的package。
这也是为什么,我们会把SpringBoot的启动类,放在最外层包下。
点进@Import引入的Registar,注意第二个参数,new PackageImports
可以看到获取的是启动类所在包的包名
再看另一个注解@Import(AutoConfigurationImportSelector.class)
引入的AutoConfigurationImportSelector.class 很关键
看他的process方法
继续看getAutoConfigurationEntry方法
看getCandidateConfigurations方法
通过这句话,我们就可以判断出,其实AutoConfigurationImportSelector.class 就是读取META-INF/spring.factories下面的包路径,加载到容器中
找到这个spring.factories 会发现一共配置了130个类
随便抽取一个,去spring.factories中查找
发现就在这里
总结:
1.SpringBoot的自动装配 主要通过 @SpringBootConfiguration 和 @EnableAutoConfiguration
2. @SpringBootConfiguration 读取当前启动类所在包下的类 加入IOC容器,也可以自定义导入Bean
3.@EnableAutoConfiguration 通过扫描 spring.factories 下的130个类,自动注入IOC容器