spring application 之 AnnotationConfigApplicationContext

建立

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 @Autowiredjava

beanFactory.setAutowireCandidateResolver(new ContextAnnotationAutowireCandidateResolver());

BeanDefinitionRegistryPostProcessor

處理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));
		}

AutowiredAnnotationBeanPostProcessor

解決@Autowired,@Value,對於註解類,須要一個後置處理器獲取全部含有@Autowired,@Value的屬性。對於XML不須要。ui

RequiredAnnotationBeanPostProcessor

校驗@Required修改的屬性有值沒有this

CommonAnnotationBeanPostProcessor

解決@Resource 註解,相似於@Autowired,@PreDestroy @PostConstructlua

EventListenerMethodProcessor

單例Bean初始完以後執行。解決@EventListener,該註解用於方法之上,會生成一個ApplicationListern註冊到ApplicationContext中。.net

DefaultEventListenerFactory

注入一個EventListenerFactory,與上面的@EventListener配合使用。code

ClassPathBeanDefinitionScanner掃描器

相關文章
相關標籤/搜索