SpringBoot自动装配
程序员文章站
2024-02-15 11:56:46
...
自动装配原理
注解:
-
@SpringBootApplication
:这是springboot最核心的注解,当然也是组合注解-
@SpringBootConfiguration
表明这是一个配置类 -
@ComponentScan
组件扫描 -
@EnableAutoConfiguration
是自动装配的总开关。-
@AutoConfigurationPackage
配置自动扫描包的路径,与注解同级目录。 -
AutoConfigurationImportSelector类
:根据配置文件(META-INF/spring.factories
),将需要注入到容器的bean注入到容器,并根据META-INF/spring-autoconfigure-metadata.properties
配置文件过滤。
-
-
-
SpringBootConfiguration:其实就是@Configuration注解,指明为配置类。
EnableAutoConfiguration:自动配置的注解。
//配置自动扫描包的路径,与注解同级目录。这也就是为什么启动类要放在所有包的同级目录的原因
@AutoConfigurationPackage
//注册AutoConfigurationImportSelector到Bean容器
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
Class<?>[] exclude() default {};
String[] excludeName() default {};
}
- AutoConfigurationImportSelector类详解
这个类会去扫描SpringBoot中spring-boot-autoconfigure下的META-INF/spring.factories文件,该文件中保存了全部的配置类的路径!系统所有的自动配置的配置类名字都是xxxAutoConfiguration
SpringBoot启动时会自动的去加载这些自动配置类,注入到Bean容器中。
随便打开一个自动配置类,如下
@Configuration(
proxyBeanMethods = false
)
@ConditionalOnClass({RabbitTemplate.class, Channel.class})
//上面两个注解先不关心
//加载配置,RabbitProperties中定义了一堆RabbitMQ相关的属性及get、set方法
@EnableConfigurationProperties({RabbitProperties.class})
//
@Import({RabbitAnnotationDrivenConfiguration.class})
public class RabbitAutoConfiguration {
public RabbitAutoConfiguration() {
}
}
如何自定义starter?
Springboot自带的starter一般以spring-boot-starter-XXX
命名,我们自定义的starter以xxx-spring-boot-starter
命名。
-
创建一个
xxx-spring-boot-starter
工程来自定义一个starter。 -
定义一个实体类来映射配置信息。
一般以
xxxProperties.java
命名,里面包含一些配置信息属性,并在类上加上注解@ConfigurationProperties
@ConfigurationProperties(prefix = "Xxx") public class XxxProperties { }
-
定义一个配置类
XxxAutoConfiguration
,并加上@Configuration
和@EnableConfigurationProperties
注解@Configuration @EnableConfigurationProperties({XxxProperties.class}) public class XxxAutoConfiguration { }
-
最后,在项目中resource目录下创建
META-INF/spring.factories
文件,在文件中指定自动装配的配置# Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.maolaoke.Xxx.autoconfigure.XxxAutoConfiguration
最重要的就是这个文件,SpringBoot在启动时的自动装配会扫描这个文件,找到自动装配类注入到IOC容器。