这部分只是涉及到spring的源码了,我只是简单列举一下常见的流程。
- Spring加载bean有哪些形式?
Spring 加载bean可以通过xml和注解等的形式,这些都是BeanDefinationReader 的实现类,是Spring的一个扩展点。BeanDefinationReader 是一个接口,定义一些约束信息的。接着生成BeanDeination,就是bean的一些定义信息,方法和属性。接下来走到BeanFactoryPostProcesser,BeanFactoryPostProcesser就是spring初始化BeanFactory一个扩展点,可以在实例化前获取bean的定义信息,和修改定义信息。
- 那你知道BeanFactory功能是什么吗?通过什么方式实现?
BeanFactory就是生成bean的工厂,负责生产和管理bean实例,是spring外部获取bean实例的入口。 他是通过反射机制实现的。
- 你知道BeanFactory的子类吗,BeanFactory和ApplicationContext仅仅只是继承关系吗?
- HierarchicalBeanFactory:提供父容器的访问功能
- ListableBeanFactory:提供了批量获取Bean的方法
- AutowireCapableBeanFactory:在BeanFactory基础上实现对已存在实例的管理
- ConfigurableBeanFactory:单例bean的注册以及生成实例,统计单例bean等信息
- ConfigurableListableBeanFactory:增加了一些其他功能:类加载器、类型转化、属性编辑器、BeanPostProcessor、bean定义、处理bean依赖关系、 bean如何销毁等等一些还有其他的功能
- DefaultListableBeanFactory:实现BeanFactory所有功能同时也能注册BeanDefinition
BeanFactory是Spring底层的一个容器,Application是在BeanFactory基础上加了一些其他特性,同时容易整合SpringAOP,国际化消息,事务的发布等,是高级容器
- 你了解Bean的生命周期吗?
bean的生命周期大概分为4个阶段:bean的实例化 - bean的属性填充 - bean的初始化 - bean的销毁
bean的实例化:当调用一个未初始化,或者给一个bean注入属性的时候注入一个未初始化的时候,会进行bean的实例化。bean的实例化就是通过反射创建出一个bean
ban的属性注入,就是给bean填充属性
bean的初始化:
-
执行aware方法: 这个对象是否实现了aware方法,如果实现了XXaware方法,就会获取相应的spring容器资源 -
执行BeanPostProcesser的前置处理方法,postProcesserBeforeInitialization,对bean进行自定义的前置操作 -
执行init-method方法,用户自定义的初始化方法 -
执行beanPostProcesser的后置处理方法,postProcesserAfterInitialization,对bean进行自定义的后置操作
bean的销毁:bean初始化成功后,bean就创建成功,若bean不再使用,就会进行销毁。销毁也是通过判断是否继承相应的接口,一步一步销毁。具体可以断点看源码