springIoc的理解,原理和实现
控制反转:
理论思想,原来的对象是由使用者来进行控制,有了spring之后,可以把整个对象交给spring来帮我们进行管理
依赖注入DI:
依赖注入,把对应的属性的值注入到具体的对象中,@autowired,populateBean完成属性的注入
容器
beanFactory,存储对象,使用map结构来存储,在spring中一般存在三级缓存,singletonObjects存放完整的bean对象,整个bean的生命周期,从创建初始化使用到销毁的过程都是容器来管理的
1,一般ioc容器的时候设计到容器的创建过程(beanFactory,DefaultListableBeanFactory)
2,加载解析bean对象,准备要创建的bean对象的定义对象 beanDefinition(xml或者注解的解析过程)
3,beanFactoryPostProcessor的处理,此处是扩展点,PlaceHolder
ConfigurSupport,ConfigurationClassProcessor.
4,BeanPostProcessor的注册功能,方便后续bean对象完成具体的扩展对象。
5,通过反射的方式将BeanDefinition对象实例化成具体的bean对象。
6,bean对象的初始化过程(填充属性,调用aware的子类方法,调用BeanPostProcessor前置处理方法,调用init-method方法,BeanPostProcessor的后置处理方法)
描述一下bean的生命周期
1,实例化bean,反射的方式生成对象
2,填充bean的属性:populateBean(),循环依赖的问题(三级缓存)
3,调用aware接口相关的方法:invokeAwareMethod(完成beanName可以获取容器bean的名称,BeanFactory获取当前bean factory这也可以调用容器的服务,BeanClassLoader对象的属性设置)
4,调用BeanPostProcessor中的前置方法:使用比较多的ApplicationContextPostProcessor设置ApplicationContext,Environment,ResourceLoader,EmbeddValueResolver等对象。
5,调用initmethod方法:invokeInitmethod(),判断是否实现了IntialzingBean接口,如果有,调用afterPropertiesSet方法。
6,调用BeanPostProceessor的后置处理方法:spring的aop就是在此实现的,AbstractAutoProxyCreator注册Destuction相关的回调接口。
7,通过getbean获取完整对象
8.销毁 判断是否实现了DisposableBean接口 destroyMethod方法