前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring bean初始化过程

spring bean初始化过程

作者头像
码农戏码
发布2021-03-23 10:18:28
3150
发布2021-03-23 10:18:28
举报
文章被收录于专栏:DDDDDD

从这个简单的代码深入,使用AnnotationConfigApplicationContext看一下spring bean的初始化过程

代码语言:javascript
复制
public static void main(String[] args) {
       ApplicationContext context =                new AnnotationConfigApplicationContext(Application.class);
       MessagePrinter printer = context.getBean(MessagePrinter.class);
       printer.printMessage();
   }

设置一个断点,看一下调用过程

bean创建

第一个方法进入AnnotationConfigApplicationContext的构造函数

代码语言:javascript
复制
public AnnotationConfigApplicationContext() {		this.reader = new AnnotatedBeanDefinitionReader(this);		this.scanner = new ClassPathBeanDefinitionScanner(this);
}public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) {   		this();   		register(annotatedClasses);
  		refresh();
  	}

AnnotationConfigApplicationContext的类结构

在this()的构造函数里面,定义了两个变量,是用来加载BeanDefinition的,具体使用哪个,就看使用的是传入的参数是什么类型就使用哪个构造函数。

比如我们的例子传入的是class,那就使用的reader

代码语言:javascript
复制
public void register(Class<?>... annotatedClasses) {
Assert.notEmpty(annotatedClasses, "At least one annotated class must be specified");		this.reader.register(annotatedClasses);
}

如果传入的是包名,那就使用的是scanner

代码语言:javascript
复制
public void scan(String... basePackages) {		Assert.notEmpty(basePackages, "At least one base package must be specified");
this.scanner.scan(basePackages);	}

看下这儿使用的reader.register()

代码语言:javascript
复制
public void register(Class<?>... annotatedClasses) {
for (Class<?> annotatedClass : annotatedClasses) {
registerBean(annotatedClass);
}
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农戏码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • bean创建
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档