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