AnnotationConfigApplicationContext源代码解析

一、AnnotationConfigApplicationContext继承结构:


二、主要涉及到的类或接口有以下几个:

  1. GenericApplicationContext——通用应用上下文,内部持有一个DefaultListableBeanFactory实例,这个类实现了BeanDefinitionRegistry接口,可以在它身上使用任意的bean definition读取器。典型的使用案例是:通过BeanFactoryRegistry接口注册bean definitions,然后调用refresh()方法来初始化那些带有应用上下文语义(org.springframework.context.ApplicationContextAware)的bean,自动探测org.springframework.beans.factory.config.BeanFactoryPostProcessor等。关于这两个接口,在介绍bean的生命周期时进行详细讲解。
  2. BeanDefinitionRegistry——用于持有像RootBeanDefinition和 ChildBeanDefinition实例的bean definitions的注册表接口。DefaultListableBeanFactory实现了这个接口,因此可以通过相应的方法向beanFactory里面注册bean。GenericApplicationContext内置一个DefaultListableBeanFactory实例,它对这个接口的实现实际上是通过调用这个实例的相应方法实现的
  3. AbstractApplicationContext——ApplicationContext接口的抽象实现,没有强制规定配置的存储类型,仅仅实现了通用的上下文功能。这个实现用到了模板方法设计模式,需要具体的子类来实现其抽象方法。自动通过registerBeanPostProcessors()方法注册BeanFactoryPostProcessorBeanPostProcessorApplicationListener的实例用来探测bean factory里的特殊bean——对比1分析
  4. AnnotationConfigRegistry——注解配置注册表。用于注解配置应用上下文的通用接口,拥有一个注册配置类和扫描配置类的方法。

三、构造方法

public AnnotationConfigApplicationContext() {
    this.reader = new AnnotatedBeanDefinitionReader(this);
    this.scanner = new ClassPathBeanDefinitionScanner(this);
}

public AnnotationConfigApplicationContext(DefaultListableBeanFactory beanFactory) {
    super(beanFactory);
    this.reader = new AnnotatedBeanDefinitionReader(this);
    this.scanner = new ClassPathBeanDefinitionScanner(this);
}

public AnnotationConfigApplicationContext(Class... annotatedClasses) {
    this();
    this.register(annotatedClasses);
    this.refresh();
}

public AnnotationConfigApplicationContext(String... basePackages) {
    this();
    this.scan(basePackages);
    this.refresh();
}
第一个构造器是最基本的无参数构造器,需要通过调用register()方法填充注解类,并进行手动刷新。在这个构造器里初始化了一个读取器和扫描器。
第二个构造器能手动指定beanFactory。
第三个构造器能手动指定注解类。

第四个通过指定包名进行自动扫描并刷新。

由于AnnotationConfigApplicationContext是GenericApplicationContext的子类,在调用它的构造器之前会先调用父类的构造器,父类构造器会实例化一个DefaultListableBeanFactory实例,这个就是基于注解配置的应用上下文的IoC容器。SpringBoot默认调用第一个无参数构造器。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tuoni123/article/details/79976105
上一篇SpringBoot 使用Spring Initializr 快速构建工程
下一篇@Configuration注解、@Bean注解以及配置自动扫描、bean作用域
想对作者说点什么? 我来说一句

解析XML的源代码

2011年10月07日 13.64MB 下载

MKV文件格式解析-源代码

2010年10月26日 230KB 下载

Spring 源代码解析

2007年09月17日 133KB 下载

Spring源代码解析

2010年05月30日 171KB 下载

uClinux源代码中Make文件完全解析

2009年09月20日 9.54MB 下载

pdb解析工程源代码

2011年10月21日 70KB 下载

BMP格式解析 Visual C++源代码

2009年09月04日 39KB 下载

spring源码分析(1-10)

2014年03月03日 352KB 下载

没有更多推荐了,返回首页

关闭
关闭