一、BeanDefinition
Spring容器在进行实例化时,会将xml配置的<bean>信息封装成一个BeanDefinition对象,Spring根据BeanDefinition来创建Bean对象,里面有很多的属性用来描述Bean。
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl" lazy-init="true" />
<bean id="userService" class="com.itheima.service.UserServiceImpl" scope="singleton">
<property name="userDao" ref="userDao"></property>
</bean>
列举几个BeanDefinition对象中包含的字段:
- beanClassName:bean的类名
- initMethodName:初始化方法名称
- propertyValues:bean的属性值
- scope:作用域
- lazyInit:延迟初始化
二、bean的创建过程
- 通过BeanDefinition获取Bean的定义信息。
- 调用构造函数实例化Bean。
- Bean的依赖注入。
- 处理Aware接口(BeanNameAware、BeanFactoryAware、ApplicationContextAware)。
- Bean的后置处理器BeanPostProcessor-前置。
- 初始化方法(Init-method、initializingBean)。
- Bean的后置处理器BeanPostProcessor-后置。
- 销毁Bean。