SpringBoot核心注解以及自动装配
核心注解
- @SpringBootApplication: 标识一个类作为SpringBoot的启动类,是@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan的组合
- @SpringBootConfiguration:配置类,用于定义一个Bean,是一个特殊的@Configuration注解,用于加载配置
- @EnableAutoConfiguration:用于启动自动配置的功能,可以自动引入相关的配置,减少开发成本
- @ComponentScan:定义Spring扫描包的路径,用于发现应用程序中的bean、组件、配置类和服务等,可以自动扫描并注册包路径下的带有@Component、@Service等注解的类
自动装配是什么
自动装配可以根据项目中添加的依赖和其他因素,自动创建和配置Spring应用所需要的Bean,开发者不需要书写大量的XML配置或者Java配置类来设置Spring容器
自动化配置原理
- 自动化配置首先从组件说起,@SpringBootApplication是@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan的组合
- 其中@EnableAutoConfiguration通过@Import注解将AutoConfigurationImportSelector.class这个类引入进来
- AutoConfigurationImportSelector.class会加载jar包的META-INF下面的spring-factories配置文件,其实用到了SPI机制
- spring-factories配置文件是一个key-value的形式,key是EnableAutoConfiguration的全路径名,value是各个需要配置的类,然后SpringBoot默认在这个配置类里面定义了100多个常用的配置类,然后再根据Condition按需加载我们的配置类,比如在配置文件中增加了对应的类才会生效
SPI
当接口存在于调用方这边,就是SPI。由调用方设计接口,然后由不同的厂商去根据这个规则接口进行实现,从而提供服务
API接口实现在厂商,调用方去获得服务
@ComponentScan默认扫描路径
默认扫描
在SpringBoot中使用@ComponentScan()注解进行组件扫描加载类时,默认的扫描范围是启动类([ProjectName]Application)所在包(直接父包)的子包。也即需要被扫描的包下的类要位于启动类所在路径下
- 正确扫描:
1 | src |
* 分析: testController位于testApplication所在包com.cdfy.test下
* 启动类所在路径: com/cdfy/test/
- 错误扫描:
1 | src |
* 分析:此时testApplication所在包为application,而controller和application无包含关系,则扫描不到controller下面的包,会造成bean创建失败。
* 启动类所在路径: com/cdfy/test/application
自定义扫描
若当前情况下,其他类不在application类所在包的子包中,但还需扫描作为bean供创建对象,则可以手动添加扫描的包。 使用@ComponentScan(“包路径”)。注意是添加,不是更新
解决上面的错误示范:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 cloud_fly blog!