目的:简化Java
开发
完成目标:
- 基于
POJO
的轻量级和最小侵入性编程 - 通过依赖注入和面向接口实现松耦合
- 基于切面和惯例进行声明式编程(
AOP
) - 通过切面和模板消除样板式代码(
JDBC Template
)
Spring
容器
负责创建对象,装配它们,配置它们并管理它们的整个生命周期,从生存到死亡。
分类:
BeanFactory
ApplicationContext
bean
工厂(由org.springframework. beans.factory.BeanFactory
接口定义)是最简单的容器,提供基本的DI
支持。
应用上下文(由org.springframework.context.ApplicationContext
接口定义)基于BeanFactory
构建,并提供应用框架级别的服务。
bean
的生命周期
Spring
对bean
进行实例化;Spring
将值和bean
的引用注入到bean
对应的属性中;- 如果
bean
实现了BeanNameAware
接口,Spring
将bean
的ID
传递给setBeanName()
方法; - 如果
bean
实现了BeanFactoryAware
接口,Spring
将调
用setBeanFactory()
方法,将BeanFactory
容器实例传入; - 如果
bean
实现了ApplicationContextAware
接口,Spring
将调
用setApplicationContext()
方法,将bean
所在的应用上下文的
引用传入进来; - 如果
bean
实现了BeanPostProcessor
接口,Spring
将调用它们
的postProcessBeforeInitialization()
方法; - 如果
bean
实现了InitializingBean
接口,Spring
将调用它们的
afterPropertiesSet()
方法。类似地,如果bean
使用init-method
声明了初始化方法,该方法也会被调用; - 如果
bean
实现了BeanPostProcessor
接口,Spring
将调用它们
的postProcessAfterInitialization()
方法; - 此时,
bean
已经准备就绪,可以被应用程序使用了,它们将一直
驻留在应用上下文中,直到该应用上下文被销毁; - 如果
bean
实现了DisposableBean
接口,Spring
将调用它的
destroy()
接口方法。同样,如果bean
使用destroy-method
声明
了销毁方法,该方法也会被调用。
Spring框架由20个不同的模块组成,这些模块依据其所属的功能可以划分为6类不同的功能。
- Spring核心容器
- Spring的AOP模块
- 数据访问与集成
- Web与远程调用
- Instrumentation
- 测试