概述:
Spring 是另一个主流的 Java Web 开发框架,该框架是一个轻量级的应用框架。
Spring 是分层的 Java SE/EE full-stack 轻量级开源框架,以 IoC(Inverse of Control,控制反转)和 AOP(Aspect Oriented Programming,面向切面编程)为内核,使用基本的 JavaBean 完成以前只可能由 EJB 完成的工作,取代了 EJB 臃肿和低效的开发模式。
在实际开发中,通常服务器端采用三层体系架构,分别为表现层(web)、业务逻辑层(service)、持久层(dao)。
Spring 对每一层都提供了技术支持,在表现层提供了与 Struts2 框架的整合,在业务逻辑层可以管理事务和记录日志等,在持久层可以整合 Hibernate 和 JdbcTemplate 等技术。
Spring 具有简单、可测试和松耦合等特点,不仅可以用于服务器端的开发,也可以应用于任何 Java 应用的开发中。
spring是一个容器,管理对象,给属性赋值,底层使用的反射机制。
spring-context和spring-webmvc是spring的两个模块;spring-context是ioc功能的,创建对象;
spring-webmvc是做web开发的,是servlet的升级;
spring-webmvc中也会使用spring-context中创建对象的功能的;
Spring最根本的使命是解决企业级应用开发的复杂性,即简化Java开发。
详述:
Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于JEE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
Spring是Java EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Johnson的程序员在 2002 年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架 。 [2] Spring是一个开源容器框架,它集成各类型的工具,通过核心的Bean factory实现了底层的类的实例化和生命周期的管理。在整个框架中,各类型的功能被抽象成一个个的 Bean,这样就可以实现各种功能的管理,包括动态加载和切面编程。 [3] Spring是独特的,因为若干个原因:
它定位的领域是许多其他流行的framework没有的。Spring致力于提供一种方法管理你的业务对象。
Spring是全面的和模块化的。Spring有分层的体系结构,这意味着你能选择使用它孤立的任何部分,它的架构仍然是内在稳定的。例如,你可能选择仅仅使用Spring来简单化JDBC的使用,或用来管理所有的业务对象。
它的设计从底部帮助你编写易于测试的代码。Spring是用于测试驱动工程的理想的framework。
Spring对你的工程来说,它不需要一个以上的framework。Spring是潜在地一站式解决方案,定位于与典型应用相关的大部分基础结构。它也涉及到其他framework没有考虑到的内容。
优缺点:
优点:
- 方便解耦,简化开发:Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给 Spring 管理。
- 方便集成各种优秀框架:Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。
- 降低 Java EE API 的使用难度:Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了封装,使这些 API 应用的难度大大降低。
- 方便程序的测试:Spring 支持 JUnit4,可以通过注解方便地测试 Spring 程序。
- AOP 编程的支持:Spring 提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。
- 声明式事务的支持:只需要通过配置就可以完成对事务的管理,而无须手动编程。
缺点:
- Spring依赖反射,反射影响性能;
- 使用门槛升高,入门Spring需要较长时间;
Spring体系结构:
Spring 框架采用分层架构,根据不同的功能被划分成了多个模块,这些模块大体可分为 Data Access/Integration、Web、AOP、Aspects、Messaging、Instrumentation、Core Container 和 Test,如图 1 所示。
图 1 Spring的体系结构
图 1 中包含了 Spring 框架的所有模块,这些模块可以满足一切企业级应用开发的需求,在开发过程中可以根据需求有选择性地使用所需要的模块。下面分别对这些模块的作用进行简单介绍。
数据访问/集成
Data Access/Integration(数据访问/集成)。
数据访问/集成层包括 JDBC、ORM、OXM、JMS 和 Transactions 模块,具体介绍如下。
- JDBC 模块:提供了一个 JDBC 的抽象层,大幅度减少了在开发过程中对数据库操作的编码。
- ORM 模块:对流行的对象关系映射 API,包括 JPA、JDO、Hibernate 和 iBatis 提供了的集成层。
- OXM 模块:提供了一个支持对象/XML 映射的抽象层实现,如 JAXB、Castor、XMLBeans、JiBX 和 XStream。
- JMS 模块:指 Java 消息服务,包含的功能为生产和消费的信息。
- Transactions 事务模块:支持编程和声明式事务管理实现特殊接口类,并为所有的 POJO。
Web 模块
Spring 的 Web 层包括 Web、Servlet、Struts 和 Portlet 组件,具体介绍如下。
- Web 模块:提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IoC 容器初始化以及 Web 应用上下文。
- Servlet模块:包括 Spring 模型—视图—控制器(MVC)实现 Web 应用程序。
- Struts 模块:包含支持类内的 Spring 应用程序,集成了经典的 Struts Web 层。
- Portlet 模块:提供了在 Portlet 环境中使用 MV C实现,类似 Web-Servlet 模块的功能。
核心容器
Spring 的核心容器 Core Container 是其他模块建立的基础,由 Beans 模块、Core 核心模块、Context 上下文模块和 Expression Language 表达式语言模块组成,具体介绍如下。
- Beans 模块:提供了 BeanFactory,是工厂模式的经典实现,Spring 将管理对象称为 Bean。
- Core 核心模块:提供了 Spring 框架的基本组成部分,包括 IoC 和 DI 功能。
- Context 上下文模块:建立在核心和 Beans 模块的基础之上,它是访问定义和配置任何对象的媒介。ApplicationContext 接口是上下文模块的焦点。
- Expression Language 模块:是运行时查询和操作对象图的强大的表达式语言。
其他模块
Spring的其他模块还有 AOP、Aspects、Instrumentation 以及 Test 模块,具体介绍如下。
- AOP 模块:提供了面向切面编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以降低耦合性。
- Aspects 模块:提供与 AspectJ 的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。
- Instrumentation 模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。
- Test 模块:支持 Spring 组件,使用 JUnit 或 TestNG 框架的测试。
Spring七大核心模块
Spring Core
Spring Core 是spring的核心容器,提供Spring框架的基本功能。Spring以bean的方式组织和管理Java应用中的各个组件及其关系。Spring使用BeanFactory来产生和管理Bean,它是工厂模式的实现。BeanFactory使用控制反转(IoC)模式将应用的配置和依赖性规范与实际的应用程序代码分开。
Spring的BeanFactory只提供一些基本的bean的存储、获取、依赖注入等功能。 Spring的上下文对象(Applic ationContext)是对BeanFactory的扩展,添加了国际化、事件传播等支持。
Spring Context
Spring Context 是Spring上下文,是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,如JNDI、EJB、电子邮件、国际化、校验和调度功能。
通俗点理解,就是我们需要一个对象,来将Spring配置文件中配置好的bean关系,加载到Spring IoC容器中,而Spring应用上下文就充当了这样的角色。
//创建Spring上下文对象,加载Spring配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("spring/applicationContext.xml");//Xml版本:
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");注解版本:AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext("xxConfig.class");
配置文件一般放在resources目录下。
applicationContext.xml文件中以xml总是配置对象,交给spring托管。
Spring AOP
Spring AOP 是Spring面向切面编程。(通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring框架中。所以,可以很容易地使 Spring框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
Spring DAO
JDBC、DAO的抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理,和不同数据库供应商所抛出的错误信息。异常层次结构简化了错误处理,并且极大的降低了需要编写的代码数量,比如打开和关闭链接。
Spring ORM
Spring ORM 即对象实体映射。(Spring框架插入了若干个ORM框架,从而提供了ORM对象的关系工具,其中包括了Hibernate、JDO和 IBatis SQL Map等,所有这些都遵从Spring的通用事物和DAO异常层次结构。
Spring Web
Web上下文模块建立在应用程序上下文模块之上,为基于web的应用程序提供了上下文。所以Spring框架支持与Struts集成,web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
Spring Web MVC
MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的。MVC容纳了大量视图技术,其中包括JSP、POI等,模型来有JavaBean来构成,存放于m当中,而视图是一个街口,负责实现模型,控制器表示逻辑代码,由c的事情。Spring框架的功能可以用在任何J2EE服务器当中,大多数功能也适用于不受管理的环境。Spring的核心要点就是支持不绑定到特定J2EE服务的可重用业务和数据的访问的对象,毫无疑问这样的对象可以在不同的J2EE环境,独立应用程序和测试环境之间重用。
Spring核心模块及其关键组件
Spring Framework 是 Spring 生态的核心基础框架,提供了企业级应用开发所需的核心功能。以下是 Spring Framework 的核心模块及其关键组件:
1. 核心容器(Core Container)
-
spring-core
基础工具类,包含依赖注入(DI)的核心支持(如BeanFactory
)。 -
spring-beans
管理对象(Bean)的定义、配置和生命周期(如BeanFactory
和ApplicationContext
)。 -
spring-context
扩展spring-beans
,提供国际化、事件传播、资源加载等功能(如ApplicationContext
)。 -
spring-expression
支持 Spring 表达式语言(SpEL),用于动态操作对象。
2. AOP 与 Instrumentation
-
spring-aop
面向切面编程(AOP)支持,如动态代理、方法拦截(@AspectJ
注解)。 -
spring-aspects
集成 AspectJ 的切面编程库。 -
spring-instrument
提供类加载器级的 Instrumentation 支持(如 Java Agent)。
3. 数据访问与集成(Data Access/Integration)
-
spring-jdbc
简化 JDBC 操作(如JdbcTemplate
)。 -
spring-tx
事务管理(如@Transactional
、PlatformTransactionManager
)。 -
spring-orm
集成 ORM 框架(如 Hibernate、JPA)。 -
spring-oxm
对象与 XML 的映射支持(如 JAXB、Castor)。 -
spring-jms
Java 消息服务(JMS)集成。 -
spring-messaging
消息驱动的架构支持(如 Spring Integration 的基础)。
4. Web 模块
-
spring-web
基础 Web 功能(如 HTTP 客户端、Servlet 监听器)。 -
spring-webmvc
基于 Servlet 的 MVC 框架(如@Controller
、DispatcherServlet
)。 -
spring-websocket
WebSocket 通信支持。 -
spring-webflux
响应式 Web 框架(基于 Reactor,支持非阻塞 IO)。
5. 集成与测试
-
spring-test
集成 JUnit、TestNG 的测试支持(如@SpringBootTest
)。 -
spring-jcl
统一的日志门面(替代 Commons Logging)。
6. 其他扩展模块
-
spring-context-support
扩展spring-context
,支持缓存(如 EhCache)、邮件、任务调度等。 -
spring-security-core
Spring Security 的核心安全功能(需单独引入依赖)。
Spring 生态中的其他项目(非 Spring Framework 核心)
-
Spring Boot
快速构建独立应用的脚手架(内嵌 Tomcat、自动配置)。 -
Spring Security
完整的安全框架(认证、授权)。 -
Spring Data
统一的数据访问抽象(如 Spring Data JPA、MongoDB)。 -
Spring Cloud
分布式系统开发工具集(如服务发现、配置中心)。 -
Spring Batch
批处理任务框架。 -
Spring Session
分布式会话管理。
示例依赖(Maven)
<!-- 核心容器 -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.22</version>
</dependency><!-- Web MVC -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.22</version>
</dependency><!-- 事务管理 -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.3.22</version>
</dependency>
总结
-
Spring Framework 是基础,包含核心容器、AOP、数据访问、Web 等模块。
-
Spring 生态 包含 Boot、Security、Cloud 等扩展项目,用于解决特定场景问题。
-
实际开发中,通常以 Spring Boot 为起点,按需集成其他模块或项目。