ApplicationContext applicationContext = new AnnotationConfigApplicationContext(NacosConfiguration.class);
public AnnotationConfigApplicationContext() { this.reader = new AnnotatedBeanDefinitionReader(this); this.scanner = new ClassPathBeanDefinitionScanner(this); }
this.conditionEvaluator = new ConditionEvaluator(registry, environment, null);
AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);
beanFactory.setDependencyComparator(AnnotationAwareOrderComparator.INSTANCE);
处理@Lazy @Value @Qualifier @Required @Autowiredjava
beanFactory.setAutowireCandidateResolver(new ContextAnnotationAutowireCandidateResolver());
处理CompoentScan等,app
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)); }
解决@Autowired,@Value,对于注解类,须要一个后置处理器获取全部含有@Autowired,@Value的属性。对于XML不须要。ui
校验@Required修改的属性有值没有this
解决@Resource 注解,相似于@Autowired,@PreDestroy @PostConstructlua
单例Bean初始完以后执行。解决@EventListener,该注解用于方法之上,会生成一个ApplicationListern注册到ApplicationContext中。.net
注入一个EventListenerFactory,与上面的@EventListener配合使用。code