Spring
概述
Spring 是一个开源框架,为了简化企业开发流程而诞生的一个框架。能够从“普通旧 Java objects”(POJO)build applications 并将企业服务 non-invasively(非侵入式) 应用于 POJO。此功能适用于 Java SE 编程 model 以及完整和部分 Java EE。
使用 spring 就无需处理:
- 不必处理 transaction(事务) API。
- 无需处理 Servlet API。
- 无需处理 JMS(消息处理程序) API。
- 无需处理 JMX API。
并且 Spring 具有一些良好的特性:
- 非侵入式
- 基于Spring开发的应用中的对象可以不依赖于Spring的API
- 依赖注入
- DI——Dependency Injection,反转控制(IOC)最经典的实现
- 面向切面编程
- Aspect Oriented Programming——AOP
- 容器
- Spring是一个容器,因为它包含并且管理应用对象的生命周期
- 组件化
- Spring实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用XML和Java注解组合这些对象。
- 一站式
- 在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上Spring 自身也提供了表述层的SpringMVC和持久层的Spring JDBC)
依赖注入与控制反转
一个类里面通常会需要调用其它对象的方法或者属性来满足程序中一些需求,最直接的方式就是 new 一个对象,或者调用静态方法/属性来使用。这个过程就已经建立了一种依赖关系了,这种关系必不可免的存在,因为程序就是一个个对象组成,对象对外暴露访问接口供其它对象调用。
当这个中关系越来越过的时候,这种情况,项目会越来越不便于管理。像是中途需要改变需求,那么就需要去找所有可能依赖某个对象的文件将替换。当然目前的 IDEA 很方便,可以一件替换,但这不是项目的重点。
很直接的一个需求,例如说改变数据库驱动,那么首先,就需要到使用 mysql 的类文件中,将其修改,这样很不好。
那么若是使用 spring 的 ioc 容器来进行管理,这个过程往往不需要改变太多的文件,只需要在 spring 的配置文件中,将驱动更换一下,那么整个项目数据库驱动就更换了。当然这是一个理想的情况,因为可能由其它因素需要考虑,不同数据库的特性也不同。
Spring Framework 控制反转(IoC)
component 通过提供一种形式化的方法来解决这个问题,该方法将不同的组件组合成一个可以使用的完全工作的 application。
Spring Framework 将形式化的设计模式编码为 first-class objects,可以将它们集成到 application
Framework Modules
Spring 框架大约由 20 多个模块的特性组成,这些模块分为:Core Container,Data Access/Integration, Web,AOP(Aspect Oriented Programming),Instrumentation,Messaging 和 Test。如图:
核心容器
核心容器由 spring-core,spring-beans,spring-context,spring-context-support和spring-expression(Spring 表达式语言)模块组成。
-
spring-core 和 spring-beans模块
提供 framework 的基本部分,包括 IoC 和依赖注入 features。
BeanFactory 是工厂模式的复杂实现。满足了程序对对象的单例需要,并将 configuration 和依赖项规范从实际程序逻辑中分离。 -
spring-context模块
- 构建在核心和 Beans 模块提供的坚实基础之上,一种以 framework-style 方式访问 objects 的方法
- 添加对国际化(使用,例如,资源包),event 传播,资源加载以及透明的上下文创建的支持,例如,Servlet 容器。 Context 模块还支持 Java EE 特性,例如 EJB,JMX 和基本远程处理。
- ApplicationContext 接口是 Context 模块的焦点。
application-context-support 支持将常见的第三方库集成到 Spring application context 中,用于缓存(EhCache,Guava,JCache),邮件(JavaMail),调度(CommonJ,Quartz)和模板引擎(FreeMarker,JasperReports,Velocity)。
- ApplicationContext 接口是 Context 模块的焦点。
-
spring-expression 模块
- 提供了一个强大的表达语言,用于在运行时查询和操作 object。
- JSP 2.1 规范中指定的统一表达式语言(统一 EL)的扩展。
- 支持设置和获取 property 值,property 赋值,方法调用,访问数组,集合和索引器的内容,逻辑和算术操作符,命名变量以及 Spring 的 IoC 容器中的 name 检索 objects。
- 还支持列表投影和选择以及 common 列表聚合。
AOP 和仪表
-
spring-aop 模块
- 提供 AOP(Alliance-compliant aspect-oriented)编程实现,允许为实例定义方法拦截器和切入点,以干净地解耦实现应该分离的功能的 code。
- 使用 source-level 元数据功能,还可以以类似于.NET 属性的方式将行为信息合并到 code 中。
-
单独的 spring-aspects 模块
提供与 AspectJ 的集成。 -
spring-instrument 模块
- 提供 class 检测支持和类加载器实现,以在某些 application 服务器中使用。
- spring-instrument-tomcat 模块包含 Spring 的 Tomcat 检测代理。
消息
Spring Framework 4 包含一个spring-messaging 模块
- 其中包含来自 Spring Integration 项目的 key 抽象,例如Message,MessageChannel,MessageHandler等,以作为基于消息传递的应用程序的基础。
- 该模块还包括一组 annotations,用于将消息映射到方法,类似于基于 Spring MVC annotation 的编程模型。
数据 Access/Integration
Data Access/Integration 层由 JDBC,ORM,OXM,JMS 和 Transaction 模块组成。
-
spring-jdbc模块
- 提供JDBC -abstraction 层,无需进行繁琐的 JDBC 编码和解析 database-vendor 特定错误代码。
-
spring-tx模块
- 支持程序性和声明式事务管理用于实现特殊接口的 classes 和所有 POJO(Plain Old Java Objects)。
-
spring-orm模块
- 为流行的 object-relational 映射 API 提供 integration 层,包括JPA,JDO和Hibernate。
- 使用spring-orm模块,可以将所有这些 O/R-mapping 框架与 Spring 提供的所有其他 features 结合使用,例如前面提到的简单声明 transaction management feature。
-
spring-oxm模块
- 提供了一个支持 Object/XML 映射实现的抽象层,例如 JAXB,Castor,XMLBeans,JiBX 和 XStream。
-
spring-jms模块(Java 消息传递服务)
- 包含用于 producing 和 consuming 消息的 features。
- 从 Spring Framework 4.1 开始,它为spring-messaging模块提供了 integration。
Web
Web 层由spring-web,spring-webmvc,spring-websocket和spring-webmvc-portlet模块组成。
-
spring-web模块
- 提供基本的面向 web 的集成,例如 multipart 文件上载功能和使用 Servlet listeners 和面向 web application context 初始化 IoC 容器。、
- 它还包含 HTTP client 和 Spring 远程支持的 web 相关部分。
-
spring-webmvc模块(也称为 Web-Servlet 模块)
- 包含 Spring 的 model-view-controller(MVC)和 REST Web Services implementation for web applications。
- Spring 的 MVC framework 提供了域 model code 和 web 表单之间的清晰分离,并与 Spring Framework 的所有其他 features 集成。
-
spring-webmvc-portlet模块(也称为 Web-Portlet 模块)提供了在 Portlet 环境中使用的 MVC implementation,并且 mirrors Servlet-based spring-webmvc模块的功能。
测试
- spring-test模块
- 使用 JUnit 或 TestNG 支持单元测试和整合测试 Spring 组件。
- 它提供了loading的 Spring ApplicationContext和高速缓存这些上下文。
- 它还提供mock objects(模拟对象),可以使用它来隔离测试您的 code。
Spring Framework Artifacts
以下是Spring artifacts 列表:
GroupId | artifactId | 描述 |
---|---|---|
org.springframework | spring-aop | Proxy-based AOP 支持 |
org.springframework | spring-aspects | AspectJ 基于方面 |
org.springframework | spring-beans | Beans 支持,包括 Groovy |
org.springframework | spring-context | Application context 运行时,包括调度和远程抽象 |
org.springframework | spring-context-support | 支持 classes 将 common third-party libraries 集成到 Spring application context 中 |
org.springframework | spring-core | 核心实用程序,由许多其他 Spring 模块使用 |
org.springframework | spring-expression | Spring 表达语言(SpEL) |
org.springframework | spring-instrument | 用于 JVM 引导的检测代理程序 |
org.springframework | spring-instrument-tomcat | Tomcat 的检测代理 |
org.springframework | spring-jdbc | JDBC 支持包,包括 DataSource 设置和 JDBC 访问支持 |
org.springframework | spring-jms | JMS 支持包,包括 send/receive JMS 消息的辅助 classes |
org.springframework | spring-messaging | 支持消息传递体系结构和协议 |
org.springframework | spring-orm | Object/Relational Mapping,包括 JPA 和 Hibernate 支持 |
org.springframework | spring-oxm | Object/XML 映射 |
org.springframework | spring-test | 支持单元测试和 integration 测试 Spring 组件 |
org.springframework | spring-tx | Transaction 基础设施,包括 DAO 支持和 JCA integration |
org.springframework | spring-web | 基础 web 支持,包括 web client 和 web-based 远程处理 |
org.springframework | spring-webmvc | Servlet 堆栈的 HTTP-based Model-View-Controller 和 REST endpoints |
org.springframework | spring-webmvc-portlet | 要在 Portlet 环境中使用的 MVC implementation |
org.springframework | spring-websocket | WebSocket 和 SockJS 基础架构,包括 STOMP 消息传递支持 |
Q.E.D.
Comments | 0 条评论