spring如何初始化一个bean

我们都知道,在创建一个spring应用的时候,通过构建spring容器,根据容器获取bean,那么spring是如何创建bean的呢?首先在创建bean容器时,通过上下文也就是非BeanFactory创建时,被标记的java对象就会在容器创建时被创建,如代码所示:

ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
IAccountDao adao = ac.getBean("accountDao",IAccountDao.class);

其中依赖注入也在这时候完成,需要注意的是,spring初始化bean是需要步骤的,这个过程类似jvm的类加载机制

1. bean的生命周期

1.1 BeanDefinition

在这里插入图片描述
对于一个普通类的实例化过程,当启动jvm时,代表该类的字节码文件被加载进内存中,在方法区生成代表这个类的唯一class模板,并通过这个模板在堆中生成对象,但是bean实例化过程却没有这么简单:
在这里插入图片描述
假如在X类上加了@XXX之类的注解,使之能被spring扫描并创建,按道理应该创建X的对象放入spring容器中,其实该不该创建并不能确切的知道,比如该类被设置为懒加载或者是prototype类型的就不会立即创建对象,虽然不会创建对象,但spring会创建BeanDefinition的子类来存储X类的信息,比如名字,描述信息等,让后将该对象放进map中

1.2 bean的产生

运行我们的java程序,通过xml文件或者注解的方式都会创建我们的bean容器,这个容器首先会将xml文件中的bean标签或者被注解的类放进去,那么这个时候会不会new一个对象呢?答案是不确定的,比如该类被设置为懒加载或者是prototype类型的,所以spring会先对它进行解析parse,将解析的类放进GenericBeanDefinition这个对象中,并且设置该类的属性:
在这里插入图片描述
通过一系列设置值过后,spring就会根据名称将这个BeanDefinition对象放进map和list中
在这里插入图片描述

1.3 bean的生命周期哪个阶段完成依赖注入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值