spring容器(一)(|spring容器(一): 容器创建起点)
1. 起点
public class AopDemo {static public void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
context.getBean(MathCalculator.class).div(4, 2);
}
}
2. 新建,初始化容器
文章图片
AnnotationConfigApplicationContext 层级
public AnnotationConfigApplicationContext(Class>... annotatedClasses) {
this();
register(annotatedClasses);
refresh();
}
- this(): 创建容器,并初始化beanMap
- 创建BeanFactory
AnnotationConfigApplicationContext 继承 GenericApplicationContext,在调用AnnotationConfigApplicationContext的构造函数时,会先调用父类的构造函数创建BeanFactory:
public GenericApplicationContext() {
this.beanFactory = new DefaultListableBeanFactory();
}
- 初始化beanMap
添加内部管理beans
org.springframework.context.annotation.internalConfigurationAnnotationProcessor,
org.springframework.context.annotation.internalAutowiredAnnotationProcessor,
org.springframework.context.annotation.internalRequiredAnnotationProcessor,
org.springframework.context.annotation.internalCommonAnnotationProcessor,
org.springframework.context.annotation.internalPersistenceAnnotationProcessor,
org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor,
org.springframework.context.event.internalEventListenerProcessor,
org.springframework.context.event.internalEventListenerFactory
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));
}
- 初始化自定义类:就是例子中的MainConfig
- register(annotatedClasses);
BeanDefinitionHolder definitionHolder = new BeanDefinitionHolder(abd, beanName);
definitionHolder = AnnotationConfigUtils.applyScopedProxyMode(scopeMetadata, definitionHolder, this.registry);
BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder, this.registry);
- refresh 刷新容器:实例化bean,创建Bean代理都是在这一步
推荐阅读
- 一个人的旅行,三亚
- 一个小故事,我的思考。
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 开学第一天(下)
- 一个人的碎碎念
- 2018年11月19日|2018年11月19日 星期一 亲子日记第144篇
- 遇到一哭二闹三打滚的孩子,怎么办┃山伯教育
- 第326天
- Y房东的后半生14