Spring 配置类的分类

  • full – 完整配置类
    • 使用@Configuration注解的类
  • lite – 简化配置类
    • 没有使用@Configuration注解,但是
      • 使用了注解@Component或者注解@Component变种的类
      • 或者使用了注解@ComponentScan的类
      • 或者使用了注解@Import的类
      • 或者使用了注解@ImportResource的类
      • 或者某个配置类含有使用@Bean注解的方法的嵌套子类

      比如某个配置类(full/lite都可以)的嵌套子类自身不使用@Configuration,但含有使用@Bean注解的方法

    • 一定不会是接口

以上信息根据Spring源代码分析获得,代码可参考:

  1. ConfigurationClassUtils#isFullConfigurationCandidatefull判断实现逻辑
  2. ConfigurationClassUtils#isLiteConfigurationCandidatelite判断实现逻辑
  3. ConfigurationClassUtils#checkConfigurationClassCandidate – 以上逻辑的组合使用
  4. 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() {
            // ...
        }
    }
}

在上面的例子中 :

  1. MapConfig是完整配置类
  2. ModuleAConfig是简化配置类
  3. ModuleBConfig简化配置类
  4. ModuleCConfig是完整配置类

你可能感兴趣的:(Spring,Core)