Bean的生命周期
1.容器启动阶段
- 加载配置
- 分析配置文件(通过BeanDefinitionReader)
- 装配到BeanDefinition
- BeanDefinition注册到BeanDefinitionRegister
- BeanFactoryPostProcess(替换占位符,修改bean信息)
2.实例化阶段
- 通过反射获取BeanDefinition对象的信息
- 通过BeanWrapper将对象进行包裹并进行返回(动态代理)
- 调用Aware接口相关的方法(BeanNameAware,BeanClassLoaderAware,BeanFactoryAware)
- 调用BeanPostProcessor的前置方法
- 调用initmethod方法:invokeInitmethod(),判断是否实现了initializingBean接口,如果有,调用afterPropertiesSet方法,没有就不调用
- 调用BeanPostProcessor的后置处理方法:Spring的AOP就是在此处实现的
- 获取到完成的对象,可以通过getBean的方式来进行对象的获取
- 销毁流程(Bean的销毁是在容器关闭的时候):
1.判断是否实现了DispoableBean接口
2.调用destoryMethod方法
BeanFactory和FactoryBean的区别
相同点:都是用来创建Bean的
不同点:BeanFactory是Spring创建对象的方法,必须遵循严格的生命周期流程,很复杂,如果想要简单的自定义某个对象的创建,同时又想交给Spring来管理,那么就需要实现FactoryBean接口了。
isSingleton():是否为单例对象
getObjectType():获取返回对象的类型
getObject():自定义创建对象的过程(new,反射,动态代理)