Spring框架基础:体系结构与核心模块详解
Spring框架基础:体系结构与核心模块详解
Spring框架是Java开发中非常重要的一个技术栈,它以轻量级、可测试和松耦合等特点,解决了企业级应用开发的复杂性问题。本文将详细介绍Spring框架的基础知识、体系结构及其核心模块,帮助读者全面了解这一强大的开发框架。
概述
Spring是一个主流的Java Web开发框架,它是一个轻量级的应用框架,采用分层的Java SE/EE full-stack架构。Spring的核心是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框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起。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是一个开源容器框架,它集成各类型的工具,通过核心的Bean factory实现了底层的类的实例化和生命周期的管理。在整个框架中,各类型的功能被抽象成一个个的Bean,这样就可以实现各种功能的管理,包括动态加载和切面编程。
Spring的独特之处在于:
- 它定位的领域是许多其他流行的framework没有的。Spring致力于提供一种方法管理你的业务对象。
- Spring是全面的和模块化的。Spring有分层的体系结构,这意味着你能选择使用它孤立的任何部分,它的架构仍然是内在稳定的。
- 它的设计从底部帮助你编写易于测试的代码。Spring是用于测试驱动工程的理想的framework。
- 它对你的工程来说,它不需要一个以上的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。下图展示了Spring的体系结构:
图1 Spring的体系结构
图1中包含了Spring框架的所有模块,这些模块可以满足一切企业级应用开发的需求,在开发过程中可以根据需求有选择性地使用所需要的模块。下面分别对这些模块的作用进行简单介绍。
数据访问/集成
数据访问/集成层包括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为起点,按需集成其他模块或项目。