此图片想要高清的可以通过此链接下载—>空白,在我上传的资源里能找到
spring主要是负责管理对象的。
所有的bean都是对象,但是并不是所有的对象都是bean;
1.spring管理对象的本质机制
1.因为Spring要管理的是bean对象
2.所以把要管理的对象变成bean对象。
3.因此我们在使用的时候,就从spring中获取我们需要使用的bean对象
2.bean的生命周期
狭义的bean的生命周期
1.spring创建一个对象(new Service())
2.填充user属性,通过的是反射的方式,私有化不会对填充产生影响
3.Aware
判断对象是否实现了BeanNameAware接口,如果实现了,就会调用 对象.setBeanName(“userService”)大概来说就是回调判断了数据类型。
4.在接口 InitializingBean 中有一个初始化方法 afterPropretiesSet(),可以在set方法之后再次进行赋值,这个是自己定义的。
5.这时候就可以称为一个bean对象的
6.默认会放到单例池。(单例是一级缓存)
广义的bean的生命周期
1.class 在创建对象之前一定会有class
2.spring并不是直接通过class直接创建bean对象的,其中有一个BeanDefintion(bean的定义),
BeanDefintion中有很多属性
3.根据扫描到的class生成BeanDefintion对象,去赋值。在BeanDefintion中有有两条属性scope和beanClass,spring在创建bean对象的时候是基于beanClass创建的,并不是原先的class,和原先的class没有直接关系
4.BeanFactory 和 BeanFactoryPostProcessor
什么是BeanFactory(bean工厂) ?
创建bean
获取bean
什么是BeanFactoryPostProcessor(bean工厂的后置处理器)?
就是在bean工厂组建完成之后,再进行工作
bean工厂组建完成,并不是创建完成bean,而是把BeanDefintion都完成放进BeanDefintionMap中去了,
通俗理解就是原材料准备好了。
在BeanFactoryPostProcessor中可以对原材料进行加工。意思就是可以再次对BeanDefintion进行处理。之后再通过BeanDefintion
生成bean对象。
bean的注册和创建有什么不同
bean的注册不会通过bean的生命周期,直接把对象放入单例池
当前过程再加上狭义的bean的生命周期,就是广义的bean的生命周期。