Java Springboot自动装配原理详解
背景
为了提高开发效率并减少代码冗余,Spring Boot引入了自动装配的机制。这使得我们不需要手动添加大量的配置文件和代码,就可以快速搭建一个可运行的应用。
自动装配原理
Spring Boot的自动装配原理就是依赖注入(DI)和控制反转(IOC)的应用。当Spring Boot发现某个Bean被多个模块所使用时,它会尝试通过 条件注解 去自动为我们进行Bean的创建和注入。这个过程叫做自动装配。而自动装配的主要实现方式就是 模板方法模式。
Spring Boot的自动装配过程分为三个步骤:
- 扫描classpath中的Jar包和项目的类路径以寻找自动装配候选者(被配置为自动装配的Bean);
- 如果某个候选者是
@Configuration
类,那么Spring Boot会扫描其中的所有Bean定义; - 通过连环的条件判断,选择并注入符合条件的Bean。
Spring Boot的自动装配条件主要包括:
- Class条件
- 注解条件:
@ConditionalOnBean
、@ConditionalOnMissingBean
、@ConditionalOnClass
、@ConditionalOnMissingClass
等。 - 属性条件:
spring.profiles.active
、spring.profiles.include
等。 - SpEL条件:
#user.name
等。 -
其他条件:
@Import
、@ImportSelector
等。 -
Property条件
- 注解条件:
@ConditionalOnProperty
等。 - 属性条件:
spring.profiles.active
、spring.profiles.include
等。 - SpEL条件:
#{'${foo.enabled}' == 'true' ? 'com.foo.Bar' : 'com.foo.Baz'}
等。
自动装配示例
示例一
比如,我们现在有一个项目需要使用到Redis缓存,但是我们并没有手动引入相关的依赖和配置文件。那么,Spring Boot自动装配机制将自动扫描工程类路径下所有的Jar包和项目路径以寻找RedisAutoConfiguration
类。一旦找到该类,就会自动尝试使用它来创建RedisConnectionFactory
、RedisTemplate
等东西。
示例二
在Maven项目中访问数据源可以使用JdbcTemplate
,如果我们需要使用阿里巴巴的druid
数据源,则需要在pom.xml
文件中引入相关依赖和相应的配置文件。但是如果我们使用的是Spring Boot框架,则只需要在pom.xml
中添加相关依赖,而不需要额外配置文件。Spring Boot会根据@ConditionalOnClass
注解去检查druid
依赖是否存在,如果存在,则自动配置Druid*
相关的所有类。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Springboot自动装配原理详解 - Python技术站