@Configuration配置类同时也和其他注解有关联,这里说的关联是其他注解的行为会影响配置类本身的状态。例如方法中提到的@Component、@ComponentScan、@PropertySource、@Import、@Bean、@ImportResource。
处理@Component注解@Component注解表示被修饰的类将会被识别为受Spring管理的类。将会被注册到Bean容器中。
private void processMemberClasses(ConfigurationClass configClass, SourceClass sourceClass) throws IOException { // 获取成员类 Collection<SourceClass> memberClasses = sourceClass.getMemberClasses(); if (!memberClasses.isEmpty()) { List<SourceClass> candidates = new ArrayList<>(memberClasses.size()); for (SourceClass memberClass : memberClasses) { // 判断是否有@Configuration或者@Component注解 if (ConfigurationClassUtils.isConfigurationCandidate(memberClass.getMetadata()) && !memberClass.getMetadata().getC lassName().equals(configClass.getMetadata().getClassName())) { candidates.add(memberClass); } } // 排序 OrderComparator.sort(candidates); // 检测是否有循环导入(@Import)的问题 for (SourceClass candidate : candidates) { if (this.importStack.contains(configClass)) { this.problemReporter.error(new CircularImportProblem(configClass, this.importStack)); } else { this.importStack.push(configClass); try { // 递归调用处理 processConfigurationClass(candidate.asConfigClass(configClass)); } finally { this.importStack.pop(); } } } } }