full– 完整配置类- 使用
@Configuration注解的类
- 使用
lite– 简化配置类- 没有使用
@Configuration注解,但是- 使用了注解
@Component或者注解@Component变种的类 - 或者使用了注解
@ComponentScan的类 - 或者使用了注解
@Import的类 - 或者使用了注解
@ImportResource的类 - 或者某个配置类含有使用
@Bean注解的方法的嵌套子类
比如某个配置类(
full/lite都可以)的嵌套子类自身不使用@Configuration,但含有使用@Bean注解的方法 - 使用了注解
- 一定不会是接口
- 没有使用
以上信息根据Spring源代码分析获得,代码可参考:
ConfigurationClassUtils#isFullConfigurationCandidate–full判断实现逻辑ConfigurationClassUtils#isLiteConfigurationCandidate–lite判断实现逻辑ConfigurationClassUtils#checkConfigurationClassCandidate– 以上逻辑的组合使用ConfigurationClassParser#doProcessConfigurationClass– 以上逻辑的业务应用
举例1 :
//使用注解@Configuration
@Configuration
public class MapConfig {
// 没有使用注解@Configuration,但含有@Bean注解方法
// 没有使用 static
public class ModuleAConfig {
@Bean
Map poiLocations() {
// ...
}
}
// 没有使用注解@Configuration,但含有@Bean注解方法
// 使用 static
private static class ModuleBConfig {
@Bean
Map namedPOIs() {
// ...
}
}
//使用注解@Configuration
@Configuration
private static class ModuleCConfig {
@Bean
Map namedRegions() {
// ...
}
}
}
在上面的例子中 :
MapConfig是完整配置类ModuleAConfig是简化配置类ModuleBConfig简化配置类ModuleCConfig是完整配置类
本文深入解析Spring框架中配置类的分类及其判断逻辑,包括完整配置类和简化配置类的定义与示例,帮助读者理解Spring配置机制。
167万+

被折叠的 条评论
为什么被折叠?



