Spring框架介绍---本文内容主要来源:http://www.cnblogs.com/jingmoxukong/p/4506493.html
Spring当前框架有20个jar包,大致可以分为6大模块:
- Core Container
- AOP and Instrumentation
- Messaging
- Data Access/Integration
- Web
- Test
Spring框架提供了非常丰富的功能,因此整个架构也很庞大。
在我们实际的应用开发中,并不一定要使用所有的功能,而是可以根据需要选择合适的Spring模块。
2.1.1 Spring 关键策略
在介绍六大模块前,首先需要说明一下Spring的两大关键策略,这是Spring框架的基石。
(1)控制反转 (Inversion of Control),英文缩写IoC
应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。
也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。
控制反转主要有两方面:
- 依赖注入 (Dependency Injection),缩写为DI
- 依赖查找 (Dependency Lookup)
其中,依赖注入应用较为广泛。
依赖注入是一种技术,它是指组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。
容器全权负责的组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。
通过JavaBean属性注射依赖关系的做法称为设值方法注入(SetterInjection);将依赖关系作为构造函数参数传入的做法称为构造器注入(ConstructorInjection)。
(2)面向切面编程 (Aspect Oriented Programming),缩写为AOP
通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
2.1.2 核心容器 (CoreContainer)
IoC容器是Spring框架的核心。spring容器使用依赖注入管理构成应用的组件,它会创建相互协作的组件之间的关联。毫无疑问,这些对象更简单干净,更容易理解,也更容易重用和测试。
Spring自带了几种容器的实现,可归纳为两种类型:
(1)Bean工厂
由 org.springframework.beans.factory.BeanFactory接口定义。
它是最简单的容器,提供基本的DI支持。
(2)应用上下文
由 org.springframework.context.ApplicationContext接口定义。
它是基于BeanFactory之上构建,并提供面向应用的服务,例如从属性文件解析文本信息的能力,以及发布应用事件给感兴趣的事件监听者的能力。
注:Bean工厂对于大多数应用来说往往太低级了,所以应用上下文使用更广泛。推荐在开发中使用应用上下文容器。
Spring自带了多种应用上下文,最可能遇到的有以下几种:
- ClassPathXmlApplicationContext——从类路径下的XML配置文件中加载上下文定义,把应用上下文定义文件当做类资源。
- FileSystemXmlApplicationContext——读取文件系统下的XML配置文件并加载上下文定义。
- XmlWebApplicationContext——读取Web应用下的XML配置文件并装载上下文定义。
以下为加载应用上下文示例
ApplicationContext context = new FileSystemXmlApplicationContext("D:\\Temp\\build.xml");
ApplicationContext context2 = new ClassPathXmlApplicationContext("build.xml");
可以看到,加载 FileSystemXmlApplicationContext 和ClassPathXmlApplicationContext 十分相似。
差异在于:前者在指定文件系统路径下查找build.xml文件;而后在所有类路径(包含JAR文件)下查找build.xml文件。
通过引用应用上下文,可以很方便的调用 getBean() 方法从 Spring 容器中获取 Bean。
相关jar包
spring-core, spring-beans,提供框架的基础部分,包括IoC和依赖注入特性。
spring-context,在spring-core, spring-beans基础上构建。它提供一种框架式的访问对象的方法。
它也支持类似JavaEE特性,例如:EJB,JMX和基本remoting。ApplicationContext接口是它的聚焦点。
springcontext-support,集成第三方库到Spring application context。
spring-expression,提供一种强有力的表达语言在运行时来查询和操纵一个对象图。
2.1.3 AOP 和 Instrumentation
相关jar包
spring-aop,提供了对面向切面编程的丰富支持。
spring-aspects,提供了对AspectJ的集成。
spring-instrument,提供了对类instrumentation的支持和类加载器。
spring-instrument-tomcat,包含了Spring对Tomcat的instrumentation代理。
2.1.4 Messaging
相关jar包
spring-messaging,包含spring的消息处理功能,如Message,MessageChannel,MessageHandler。
2.1.5 数据访问与集成 (DataAccess / Integaration)
Data Access/Integration层包含了JDBC / ORM / OXM /JMS和Transaction模块。
相关jar包
spring-jdbc,提供了一个JDBC抽象层。
spring-tx,支持编程和声明式事务管理类。
spring-orm,提供了流行的对象关系型映射API集,如JPA,JDO,Hibernate。
spring-oxm,提供了一个抽象层以支持对象/XML映射的实现,如JAXB,Castor,XMLBeans,JiBX 和 XStream.
spring-jms,包含了生产和消费消息的功能。
2.1.6 Web
相关jar包
spring-web,提供了基本的面向web的功能,如多文件上传、使用Servlet监听器的Ioc容器的初始化。一个面向web的应用层上下文。
spring-webmvc,包括MVC和REST web服务实现。
spring-webmvc-portlet,提供在Protlet环境的MVC实现和spring-webmvc功能的镜像。
2.1.7 测试 (Test)
相关jar包
spring-test,以Junit和TestNG来支持spring组件的单元测试和集成测试。