自动配置类通常位于Spring Boot的自动配置模块中,并且被标记为
@Configuration
类。这些类使用
@Conditional
注解来检查某些条件是否满足,如果满足,则创建和配置相关的bean。这些条件可能包括检查类路径上是否存在特定的类、检查应用程序的属性设置、检查是否存在特定的bean等。
自动配置类还可用于自动配置各种常见的Spring组件和第三方库。这些自动配置类大大简化了应用程序的配置过程,使得开发者可以更加专注于实现业务逻辑,而不是花费大量时间在繁琐的配置上。
如何引入第三方库
看如下示例:
package com.cys.spring.chapter16;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ConfigurationClassPostProcessor;
import org.springframework.context.annotation.Import;
import org.springframework.context.support.GenericApplicationContext;
public class TestAutoConfig {
@SuppressWarnings("all")
public static void main(String[] args) {
GenericApplicationContext context = new GenericApplicationContext();
context.registerBean("config", Config.class);
context.registerBean(ConfigurationClassPostProcessor.class);
context.refresh();
for (String name : context.getBeanDefinitionNames()) {
System.out.println(name);
}
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>");
System.out.println(context.getBean(Bean1.class));
}
@Configuration // 本项目的配置类
@Import({
AutoConfiguration1.class, AutoConfiguration2.class})
static class Config {
}
@Configuration // 第三方的配置类
static class AutoConfiguration1 {
@Bean
public Bean1 bean1() {
return new Bean1("第三方");
}
}
static class Bean1 {
private String name;
public Bean1() {
}
public Bean1(String name) {
this.name = name;
}
@Override
public String toString() {
return "Bean1{" +
"name='" + name + '\'' +
'}';
}
}
@Configuration // 第三方的配置类
static class AutoConfiguration2 {
@Bean
public Bean2 bean2() {
return new Bean2();
}
}
static class Bean2 {
}
}
运行:
config
org.springframework.context.annotation.ConfigurationClassPostProcessor
com.cys.spring.chapter16.TestAutoConfig$AutoConfiguration1
bean1
com.cys.spring.chapter16.TestAutoConfig$AutoConfiguration2
bean2
>>>>>>>>>>>>>>>>>>>>>>>>>
Bean1{name='第三方'}
首先在我们当前应用的配置类Config中,使用@Import({AutoConfiguration1.class, AutoConfiguration2.class})
将模拟出的第三方的配置类AutoConfiguration1
和AutoConfiguration2<