创建
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(NacosConfiguration.class);
AnnotationConfigApplicationContext 构造方法
public AnnotationConfigApplicationContext() {
this.reader = new AnnotatedBeanDefinitionReader(this);
this.scanner = new ClassPathBeanDefinitionScanner(this);
}
AnnotatedBean读取
Contional 条件注解解析类,是否需要忽略当前类
this.conditionEvaluator = new ConditionEvaluator(registry, environment, null);
默认注解配置处理器
AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);
排序注解器
beanFactory.setDependencyComparator(AnnotationAwareOrderComparator.INSTANCE);
依赖解决处理器
处理@Lazy @Value @Qualifier @Required @Autowired
beanFactory.setAutowireCandidateResolver(new ContextAnnotationAutowireCandidateResolver());
BeanDefinitionRegistryPostProcessor
处理CompoentScan等,
if (!registry.containsBeanDefinition(CONFIGURATION_ANNOTATION_PROCESSOR_BEAN_NAME)) {
RootBeanDefinition def = new RootBeanDefinition(ConfigurationClassPostProcessor.class);
def.setSource(source);
beanDefs.add(registerPostProcessor(registry, def, CONFIGURATION_ANNOTATION_PROCESSOR_BEAN_NAME));
}
AutowiredAnnotationBeanPostProcessor
解决@Autowired,@Value,对于注解类,需要一个后置处理器获取所有含有@Autowired,@Value的属性。对于XML不需要。
RequiredAnnotationBeanPostProcessor
校验@Required修改的属性有值没有
CommonAnnotationBeanPostProcessor
解决@Resource 注解,类似于@Autowired,@PreDestroy @PostConstruct
EventListenerMethodProcessor
单例Bean初始完之后执行。解决@EventListener,该注解用于方法之上,会生成一个ApplicationListern注册到ApplicationContext中。
DefaultEventListenerFactory
注入一个EventListenerFactory,与上面的@EventListener配合使用。