Spring Bean生命周期

1.Spring Bean的生命周期是Spring面试热点问题。Spring Bean的生命周期指的是从一个普通的Java类变成Bean的过程

以下是图例

Spring Bean的生命周期有以下八个步骤:

1)通过XMLJava annotation(注解)以及Java Configuration(配置类)等方式加载Spring Bean

2)BeanDefinitionReader:解析Bean的定义。在Spring容器启动过程中,会将Bean解析成Spring内部的BeanDefinition结构;
理解为:将spring.xml中的<bean>标签转换成BeanDefinition结构有点类似于XML解析

BeanDefinition
BeanDefiniton是一个接口,继承自AttributeAccessor和BeanMetadataElement两个接口,这两个接口主要是为了“访问对象相关属性”和“获取元数据相关信息”。BeanDefinition的主要定义对象就是Bean,对bean在整个Spring 容器框架中的基本数据结构进行定义,方便BeanFactory等获取

3)BeanDefinition:包含了很多属性和方法。例如:id、class(类名)、scope、ref(依赖的bean)等等。其实就是将bean(例如<bean>)的定义信息
存储到这个对应BeanDefinition相应的属性中

例如:
<bean id="" class="" scope=""> -----> BeanDefinition(id/class/scope)

4)BeanFactoryPostProcessor:是Spring容器功能的扩展接口。

注意:
4.1)BeanFactoryPostProcessor在spring容器加载完BeanDefinition之后,在bean实例化之前执的4.2)对bean元数据(BeanDefinition)进行加工处理,也就是BeanDefinition属性填充、修改等操作

5)BeanFactory:Bean工厂。它按照我们的要求生产我们需要的各种各样的Bean。

例如:
BeanFactory -> List<BeanDefinition>
BeanDefinition(id/class/scope/init-method)
<bean class="com.zking.spring02.biz.BookBizImpl"/>
foreach(BeanDefinition bean : List<BeanDefinition>){undefined
   根据class属性反射机制实例化对象(CreateBeanInstance方法)
   反射赋值设置属性(PopulateBean方法)
}


6)Aware感知接口:在实际开发中,经常需要用到Spring容器本身的功能资源

例如:BeanNameAware、ApplicationContextAware等等
BeanDefinition 实现了 BeanNameAware、ApplicationContextAware

Spring Aware接口
org.springframework.beans.factory.Aware使得自定义Bean可以识别利用Spring容器的资源,比如:

BeanNameAware.setBeanName(String),可以在Bean中得到它在IOC容器中的Bean的实例的名字
BeanFactoryAware.setBeanFactory(BeanFactory),可以在Bean中得到Bean所在的IOC容器,从而直接在Bean中使用IOC容器的服务
ApplicationContextAware.setApplicationContext(ApplicationContext),可以在Bean中得到Bean所在的应用上下文,从而直接在Bean中使用上下文的服务。
MessageSourceAware,在Bean中可以得到消息源
ApplicationEventPublisherAware,在bean中可以得到应用上下文的事件发布器,从而可以在Bean中发布应用上下文的事件
ResourceLoaderAware,在Bean中可以得到ResourceLoader,从而在bean中使用ResourceLoader加载外部对应的Resource资源
注:Spring官方不推荐自定义Bean实现Aware接口,这会增加代码与Spring 框架的耦合性        

7)BeanPostProcessor:后置处理器。在Bean对象实例化和引入注入完毕后,在显示调用初始化方法的前后添加自定义的逻辑。(类似于AOP的绕环通知)

前提条件:如果检测到Bean对象实现了BeanPostProcessor后置处理器才会执行Before和After方法
BeanPostProcessor
7.1)Before
7.2)调用初始化Bean(InitializingBean和init-method,Bean的初始化才算完成)
7.3)After

完成了Bean的创建工作

8)destory:销毁
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值