Bean和Spirng模块
容纳Bean
在Spring中,应用对象生存于Spring容器中,如图所示,Spring容器可以创建、装载、配置这些Bean,并且可以管理它们的生命周期。
Spring的容器实现
- Bean工厂(
org.springframework.beans.factory.BeanFactory
):最简单的容器,提供基本的DI支持; - 应用上下文(
org.springframework.context.ApplicationContext
):基于BeanFactory之上构建,提供面向应用的服务。
常用的几种应用上下文
- ClassPathXmlApplicationContext:从类路径中的XML配置文件加载上下文,会在所有的类路径(包括jar文件)下查找;
- FileSystemXmlApplicationContext:从文件系统中读取XML配置文件并加载上下文,在指定的文件系统路径下查找;
- XmlWebApplicationContext:读取Web应用下的XML配置文件并加载上下文;
Bean的生命周期
-
Spring对Bean进行实例化;
-
Spring将值和Bean的引用注入进Bean对应的属性中;
-
如果Bean实现了
BeanNameAware
接口,Spring将Bean的ID传递给setBeanName()
接口方法; -
如果Bean实现了
BeanFactoryAware
接口,Spring将调setBeanFactory()
接口方法,将BeanFactory容器实例传入; -
如果Bean实现了
ApplicationContextAware
接口,Spring将调用setApplicationContext()
接口方法,将应用上下文的引用传入; -
如果Bean实现了
BeanPostProcessor
接口,Spring将调用postProcessBeforeInitialization()
接口方法; -
如果Bean实现了
InitializationBean
接口,Spring将调用afterPropertiesSet()
方法。类似的如果Bean使用了init-method
声明了初始化方法,该方法也会被调用; -
如果Bean实现了
BeanPostProcessor
接口,Spring将调用ProcessAfterInitialization()
方法; -
此时此刻,Bean已经准备就绪,可以被应用程序使用了,它们将一直
驻留在应用上下文中
,直到该应用上下文被销毁; -
如果Bean实现了
DisposableBean
接口,Spring将调用destory()
方法,同样的,如果Bean中使用了destroy-method
声明了销毁方法,也会调用该方法;
Spring模块
核心Spring容器
容器是Spring框架最核心的部分,它负责Spring应用中Bean的创建、配置和管理。Spring模块都构建与核心容器之上,当配置应用时,其实都隐式地使用了相关的核心容器类。另外,该模块还提供了许多企业级服务,如邮件、JNDI访问、EJB集成和调度等。
AOP
AOP是Spring应用系统开发切面的基础,与依赖注入一样,可以帮助应用对象解耦
。借助于AOP,可以将遍布于应用的关注点(如事务和安全等)从所应用的对象中解耦出来。
数据访问与集成
Spring的JDBC和DAO模块封装了大量的样板代码,这样可以使得在数据库代码变得简洁,也可以更专注于我们的业务,还可以避免数据库资源释放失败而引发的问题。另外,Spring AOP为数据访问提供了事务管理服务。同时,Spring还与流程的ORM(Object-Relational Mapping)进行了集成,如Hibernate、MyBatis等。
Web和远程调用
Spring提供了两种Web层框架:面向传统Web应用的基于Servlet的框架和面向使用Java Portlet API的基于Portlet的应用。Spring远程调用服务集成了RMI、Hessian、Burlap、JAX-WS等。
测试
Spring提供了测试模块来测试Spring应用。