一、为什么要使用spring?
1、基于pojo的轻量级和最小侵入式编程
2、通过依赖注入和面向接口实现松耦合
3、通过切面和惯例进行声明式编程
4、通过切面和模板减少样板式开发
二、spring的容器可以归结为两种
1、beanfactory
2、applicationContext
三、bean的生命周期
1、Spring对bean进行实例化
2、Spring将值和bean的应用注入到bean对应的属性中
3、若bean实现BeanNameAware接口,Spring将bean的ID传递给setBeanName()方法
4、若bean实现BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory的容器实例传入
5、若bean实现ApplicationContextAware接口,Spring将调用setApplicationContext(()方法,将bean所在的应用上下文的引用传入进来
6、若bean实现BeanPostProcessor接口,Spring将调用PostProcessBeforeinitialization()方法
7、若bean实现InitializingBean接口,Spring将调用afterpropertiesSet()方法。类似的,如果bean使用init-method声明了初始化方法,该方法也会被调用
8、若实现BeanPostProcessor接口,Spring将调用PostProcessBeforeinitialization()方法
9、此时,bean已经准备就绪可以被应用程序使用了,他们将一直驻留在应用上下文,直到应用上下文被摧毁
10、若实现DisposableBean接口,Spring将调用destroy()接口方法。类似的,如果bean使用destroy-method声明了初始化方法,该方法也会被调用