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扫描器

相关文章
相关标签/搜索