springboot系列--自动配置原理
SpringBoot系列——自动配置原理大揭秘🚀
SpringBoot最令人称道的特性之一就是它的自动配置能力,让我们告别了繁琐的XML配置时代!今天就来揭开它的神秘面纱~✨
自动配置的核心机制
自动配置的核心是`@EnableAutoConfiguration`注解,它通过`spring.factories`文件加载各种自动配置类:
```java
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public@interfaceEnableAutoConfiguration{
StringENABLED_OVERRIDE_PROPERTY="spring.boot.enableautoconfiguration";
Class[]exclude()default{};
String[]excludeName()default{};
}
```
条件装配的魔法✨
SpringBoot通过一系列`@Conditional`注解实现智能装配:
```java
@Configuration
@ConditionalOnClass({DataSource.class,EmbeddedDatabaseType.class})
@ConditionalOnMissingBean(type="io.r2dbc.spi.ConnectionFactory")
@EnableConfigurationProperties(DataSourceProperties.class)
publicclassDataSourceAutoConfiguration{
//自动配置逻辑...
}
```
常用条件注解包括:
-`@ConditionalOnClass`:类路径存在指定类时生效
-`@ConditionalOnMissingBean`:容器中没有指定Bean时生效️
-`@ConditionalOnProperty`:配置属性满足条件时生效⚙️
自动配置执行流程🔄
1.启动时加载`META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports`文件
2.过滤排除项(通过`exclude`或`excludeName`)
3.应用条件注解筛选有效配置类
4.按顺序加载剩余配置类
自定义自动配置示例️
我们也可以创建自己的自动配置:
```java
@Configuration
@ConditionalOnClass(MyService.class)
@EnableConfigurationProperties(MyServiceProperties.class)
publicclassMyServiceAutoConfiguration{
@Bean
@ConditionalOnMissingBean
publicMyServicemyService(MyServicePropertiesproperties){
returnnewMyService(properties.getPrefix());
}
}
```
记得在`META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports`中添加你的配置类全限定名!
SpringBoot的自动配置就像一位贴心的助手🤖,它通过约定大于配置的原则,让我们可以专注于业务逻辑开发,而不用操心各种繁琐的配置工作。理解它的原理后,我们就能更好地驾驭这个强大的功能啦!🎉
SpringBoot最令人称道的特性之一就是它的自动配置能力,让我们告别了繁琐的XML配置时代!今天就来揭开它的神秘面纱~✨
自动配置的核心机制
自动配置的核心是`@EnableAutoConfiguration`注解,它通过`spring.factories`文件加载各种自动配置类:
```java
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public@interfaceEnableAutoConfiguration{
StringENABLED_OVERRIDE_PROPERTY="spring.boot.enableautoconfiguration";
Class[]exclude()default{};
String[]excludeName()default{};
}
```
条件装配的魔法✨
SpringBoot通过一系列`@Conditional`注解实现智能装配:
```java
@Configuration
@ConditionalOnClass({DataSource.class,EmbeddedDatabaseType.class})
@ConditionalOnMissingBean(type="io.r2dbc.spi.ConnectionFactory")
@EnableConfigurationProperties(DataSourceProperties.class)
publicclassDataSourceAutoConfiguration{
//自动配置逻辑...
}
```
常用条件注解包括:
-`@ConditionalOnClass`:类路径存在指定类时生效
-`@ConditionalOnMissingBean`:容器中没有指定Bean时生效️
-`@ConditionalOnProperty`:配置属性满足条件时生效⚙️
自动配置执行流程🔄
1.启动时加载`META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports`文件
2.过滤排除项(通过`exclude`或`excludeName`)
3.应用条件注解筛选有效配置类
4.按顺序加载剩余配置类
自定义自动配置示例️
我们也可以创建自己的自动配置:
```java
@Configuration
@ConditionalOnClass(MyService.class)
@EnableConfigurationProperties(MyServiceProperties.class)
publicclassMyServiceAutoConfiguration{
@Bean
@ConditionalOnMissingBean
publicMyServicemyService(MyServicePropertiesproperties){
returnnewMyService(properties.getPrefix());
}
}
```
记得在`META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports`中添加你的配置类全限定名!
SpringBoot的自动配置就像一位贴心的助手🤖,它通过约定大于配置的原则,让我们可以专注于业务逻辑开发,而不用操心各种繁琐的配置工作。理解它的原理后,我们就能更好地驾驭这个强大的功能啦!🎉
