一.一些基本概念

1.ioc(控制反转),spring之前需要对象的时候都是直接new(或者反射),创建对象的过程比较分散;spring中用一个容器,将对象都放在容器中,程序需要的时候直接来容器中取值,这样,对象A和对象A的属性对象B都放在容器中集中管理,也就是说将对象的控制权集中化交给容器来控制

2.怎么交给容器来控制?最简单的想法,就是将所有的class字节码交给容器,通过xml和注解的方式,容器将class字节码转化为BeanDefinition类定义信息,用map来维护这个集合beanDefinitionMap

3.有了BeanDefinition类定义,提供可以操作BeanDefinition信息的BeanFactoryPostProcessor接口,往容器中加入BeanDefinition类定义BeanDefinitionRegistryPostProcessor接口

4.提供一些感知接口Aware,XXXAware,主要是提供一个回调的接口,操作XXX的值,如BeanNameAware、BeanFactoryAware等

5.通过BeanDefinition类定义可以生成所有对象,提供可以操作生成新对象的接口BeanPostProcessor,在对象实例化之前的操作InstantiationAwareBeanPostProcessor(继承于BeanPostProcessor),因为是集中管理,所以可以实现切面,织入自定义的增强逻辑,其实这就是aop;BeanPostProcessor##postProcessBeforeInitialization方法在bean实例化完毕(且已经注入完毕),在afterPropertiesSet或自定义init方法执行之前执行;BeanPostProcessor##postProcessAfterInitialization方法,在afterPropertiesSet或自定义init方法执行之后

二.bean的生命周期

创建:InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation-->>构造方法-->>InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation-->>BeanPostProcessor#postProcessBeforeInitialization()-->>@PostConstruct-->>InitializingBean##afterPropertiesSet()-->>initMethod()-->>BeanPostProcessor#postProcessAfterInitialization

销毁:@PreDestroy-->>DisposableBean.destroy()-->>destroyMethod()

 

三.spring中大致实现