1 概述
Spring是最受欢迎的企业级Java应用程序开发框架。
关键技术:控制反转的依赖注入(DI)模式
关键组件:面向方面的程序设计(AOP)
2 结构体系
Spring是模块化的,允许开发人员挑选和选择适用于自己的模块,不需要将剩余部分引入。
2.1 核心容器
核心容器由核心模块、Bean、上下文和表达式语言模块组成:
核心模块:提供框架的基本组成部分,包括IoC和依赖注入功能
Bean模块:提供了BeanFactory,它是一个工厂模式的复杂实现
上下文模块:建立在核心和Bean模块的基础上,是访问定义和配置的任何对象的媒介(ApplicationContext接口是上下文模块的重点)
表达式语言模块:在运行时提供查询和操作一个对象图的表达式语言
2.2 数据访问/集成
数据访问/集成层包括JDBC、ORM、OXM、JMS和事务处理模块:
JDBC:提供删除冗余的JDBC相关编码的JDBC抽象层
ORM:为流行的对象关系映射API,包括JPA、JDO、Hibernate和iBatis,提供集成层
OXM:提供了抽象层,支持对JAXB、Castor、XMLBeans、JiBx和XStream的对象/XML的映射实现
JMS(JAVA消息服务):包含生产和消费的信息功能
事务处理:为实现特殊接口的类以及所有的POJO支持编程式和声明式失事务管理
2.3 Web
Web层是由Web、Web-MVC、Web-socket和Web-Portlet组成:
Web模块:提供基本的面向web的集成功能,例如多个文件上传的功能、使用Sertvlet监听器
Web-MVC模块:包含Spring的模型-视图-控制器(MVC),实现了web应用程序
Web-Socket模块:为WebSocket-based提供支持,在web应用程序中提供客户端和服务端之间通信的两种方式
Web-Portlet模块:提供在portlet环境中实现MVC,反映了Web-Socket模块的功能
2.4 其他
还有其他一些重要的模块,像AOP、Aspects、Insrtumentation....
3 环境搭建
(1) 安装Java开发工具包(JDK)
(2) 安装Apache Commons Logging API
(3) 安装Eclipse IDE
(4) 安装Spring框架
4 IOC容器
4.1 概述
(1)是什么
Spring容器是用来保存与Spring框架相关数据的容器,通常用于存储各种各样的Bean
(2)为什么要用
使用Spring管理Bean对象可以实现对象对资源的有效使用。
当我们在使用Sping的Bean对象时,会遇到以下两种情况:
a.当一个对象被频繁使用时,对内存资源消耗比较大。如果使用Spring管理Bean类,因为Spring默认是单例模式,所以能避免不断地创建新的实例以致于并发量很大时垃圾回收效率低的问题,但这样容易导致多线程问题
b.当一个对象使用次数较少,这时候就没必要让这个对象留存在内存中,可以将Spring管理的Bean的作用域设置为prototype,在每次调用的时候创建一次,用完就销毁
(3)容器管理哪些对象
由于Spring默认管理Bean是单例模式,为了避免多线程导致的并发问题,一般用Spring管理各种Service类。
最常用Spring容器管理的注解有:@Controller、@Service、@Repository、@Component、@Bean等,加了以上注解的类,会自动交给Spring容器管理,需要使用的时候直接注入获取即可。
4.2 两种容器
Spring提供了以下两种不同类型的容器:
① Spring BeanFactory容器:是最简单的容器,给DI提供了基本的支持
② Spring ApplicationContext容器:添加了更多企业特定的功能
ApplicationContext容器包括了BeanFactory容器的所有功能
4.3 BeanFactory 容器
这是一个最简单的容器,主要功能是为依赖注入(DI)提供支持,这个容器接口定义在org.springframework.beans.factory.BeanFactor中。
BeanFactory和相关的接口仍然保留在Spring中,主要目的是向后兼容已经存在的、和那些Spring整合在一起的第三方框架
在Spring中,有大量对BeanFactory接口的实现,其中最常用的是XmlBeanFactory类,这个容器从一个XML文件中读取配置元数据,并由这些元数据来生成一个被配置化的系统或应用
4.4 ApplicationContext容器
ApplicationContext是Spring中较高级的容器
(1)与BeanFactory的相同点
可以加载配置文件中定义的Bean,将所有Bean集中在一起,当有请求的时候分配Bean
(2)与BeanFactory不同点
ApplicationContext包含了BeanFactory所有的功能,增加了企业所需要的功能,例如从属性文件中解析文本信息
(3)常用的接口实现
1) FileSystemXmlApplicationContext:该容器从XML文件中加载已被定义的bean,需要提供给构造器XML文件完整路径
2) ClassPathXmlApplicationContext:该容器从XML文件中加载已被定义的Bean,不需要提供XML文件完整的路径,只需要正确配置CLASSPATH环境变量,因为容器会从CLASSPATH中搜索Bean配置文件
3) WebXmlApplicationContext:该容器会在一个web应用程序的范围内加载已经在XML文件中定义的Bean