看spring-boot相关代码发现,很多地方都使用了名为“autoconfigure”的jar包。
autoconfigure 即“自动配置”的意思,也就是说它会根据项目引用的jar包、参数配置等,自动生成相应的Bean。
如常用的 spring-boot-autoconfigure 组件,看源码发现其中包含了几乎所有常用的第三方组件,如:jdbc,mongo,redis,kafka 等等。
使用 autoconfigure
示例1:
@Configuration
class MyAutoConfiguration { // 类不能使用private、final修饰符
@Bean
@ConditionalOnClass(A.class)
public A a() {
A a = new A();
return a;
}
@Bean
@ConditionalOnClass(B.class)
public B b() {
return new B();
}
}
示例2:
@Configuration
class MyAutoConfiguration { // 类不能使用private、final修饰符
@Configuration
@ConditionalOnClass(A.class) // 当A类存在时加载
public static class AConfigure {
@Bean
public A a() {
A a = new A();
return a;
}
}
@Configuration
@ConditionalOnClass(B.class) // 当B类存在时加载
public static class BConfigure {
@Bean
public B a() {
B b = new B();
return b;
}
}
}
说明:
1.在使用@ConditionalOnClass 时需要注意, 同一个类中必须所有的类都存在,否则会报“类未定义”异常。
如:示例1中,如果B类不存在,则加载时会报如下异常,此时可参考示例2,放在不同类中。
Caused by: java.lang.NoClassDefFoundError: B
2.spring.factories 该文件的作用界限还不清楚,不添加该文件也可以实现autoconfigure