Spring框架概述和体系结构
⼀、什么是 Spring
Spring框架是⼀种轻量级解决⽅案,是构建企业级应⽤程序的⼀站式解决⽅案。然⽽,Spring是模块化的,允许您只使⽤需要的部分,⽽不必引⼊其他部分。您可以使⽤IoC容器,上⾯可以使⽤任何web框架,但是也可以只使⽤Hibernate集成代码或JDBC抽象层。Spring框架⽀持声明式事务管理、通过RMI或web服务远程访问逻辑,以及⽤于持久化数据的各种选项。它提供了⼀个功能齐全的MVC框架,使您能够透明地将AOP集成到软件中。
1、介绍
Spring的设计是⾮侵⼊性的,这意味着您的域逻辑代码通常不依赖于框架本⾝。在集成层(例如数据访问层)中,将存在⼀些对数据访问技术和Spring库的依赖。但是,应该很容易将这些依赖项与代码库的其他部分隔离开来。
Spring框架是⼀个Java平台,它为开发Java应⽤程序提供了全⾯的基础设施⽀持。Spring处理基础设施,这样您就可以专注于您的应⽤程序。
Spring使您能够从“普通的旧Java对象”(pojo)构建应⽤程序,并将企业服务⾮⼊侵地应⽤于pojo。此功能
适⽤于Java SE编程模型以及完整和部分Java EE。
2、依赖注⼊和控制反转
Java应⽤程序(⼀个松散的术语,它运⾏从受约束的嵌⼊式应⽤程序到n层的服务器端企业应⽤程序)通常由协作形成应⽤程序的对象组成。因此,应⽤程序中的对象相互依赖。
尽管Java平台提供了丰富的应⽤程序开发功能,但是它缺乏将基本构建块组织成⼀个连贯的整体的⽅法,这就把这个任务留给了架构师和开发⼈员。虽然可以使⽤设计模式,例如⼯⼚,抽象⼯⼚,建筑,装饰,和服务定位器组成的各种类和对象实例应⽤程序组成,这些模式是:最佳实践给出⼀个名字,有什么模式的描述,如何应⽤它,它解决的问题,等等。模式是形式化的
Spring Framework Inversion of Control (IoC)组件通过提供⼀种形式化的⽅法,将不同的组件组合成⼀个完全可⽤的应⽤程序,从⽽解决了这个问题。Spring框架将形式化的设计模式编码为⼀级对象,您可以将其集成到⾃⼰的应⽤程序中。许多组织和机构以这种⽅式使⽤Spring框架来设计健壮的、可维护的应⽤程序。
⼆、Spring框架体系
(本框架体系描述的是spring 4.x版本)
Spring框架由⼤约20个模块组成的特性组成。这些模块分为核⼼容器、数据访问/集成、Web、AOP(⾯向⽅⾯编程)、⼯具、消息传递和测试。
1、核⼼容器
核⼼容器由spring-core、spring-beans、spring-context、spring-context-support和spring-expression(Spring Expression Language)模块组成。
spring-core和spring-beans 模块提供了框架的基本部分,包括控制反转(Inversion of Control, IOC)和依赖注⼊(Dependency Injection, DI)。BeanFactory是⼀个复杂的⼯⼚模式实现。它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦,BeanFactory 容器实例化后并不会⾃动实例化 Bean,只有当 Bean被使⽤时 BeanFactory 容器才会对该 Bean 进⾏实例化与依赖关系的装配。
spring-context 上下⽂模块构建在core和bean模块之上:它是以⼀种类似JNDI注册的⽅式访问对象。Context模块继承Beans模块的特性,并添加了国际化(例如使⽤资源包)、事件⼴播、资源加载和透明地创建上下⽂(例如使⽤Servlet容器)的⽀持。context模块还⽀持EJB、JMX和基本远程处理等JavaEE特性。ApplicationContext是Context模块的核⼼接⼝。
spring-context-support⽀持将常见的第三⽅库集成到Spring应⽤程序上下⽂中,⽤于缓存(EhCache、Guava、JCache)、邮件(JavaMail)、调度(CommonJ、Quartz)和模板引擎(FreeMarker、JasperReports、Velocity)。
spring-expression 模块是统⼀表达式语⾔(unified expression language,unified EL)的扩展,⽤于在运⾏时查询和操作对象图。该语⾔⽀持设置和获取属性值、属性赋值、⽅法调⽤、访问数组、集合和索引的内容、逻辑和算术操作符、命名变量,以及从Spring的IoC容器按名称检索对象。还⽀持列表映射、选择以及常见的列表聚合。
2、AOP 和 Instrumentation
spring-aop 模块提供⾯向切⾯的编程实现,允许你定义⽅法和切⼊点对代码⼲净地解耦分离。使⽤源码级的元数据功能,还可以将⾏为信息以类似.NET属性的⽅式合并到代码中。
spring-aspects 模块集成⾃ AspectJ 框架, 主要是为 Spring AOP 提供多种 AOP 实现⽅法
spring-instrument 模块提供⽤于某些应⽤服务器的类instrumentation ⽀持和类加载器实现。
spring-instrument-tomcat 模块⽤于Tomcat的Spring的instrumentation代理
3、Messaging
Spring Framework 4 包含spring-messaging模块,来⾃Spring集成项⽬的抽象,如Message、MessageChannel、
MessageHandler等,⽤来提供基于消息的基础服务。该模块还包括⼀组⽤于将消息映射到⽅法的注解,类似于基于编程模型的Spring MVC的注解。
4、数据访问和集成
Data Access/Integration 层由JDBC、ORM、OXM、JMS和Transaction 模块组成。
spring-jdbc 模块提供了JDBC抽象层,它消除了冗长的JDBC编码和对数据库供应商特定错误代码解析的需要。主要是提供JDBC模板⽅式、关系数据库对象化⽅式、SimpleJdbc⽅式、事务管理来简化JDBC编程,主要实现类是 JdbcTemplate、SimpleJdbcTemplate 以及 NamedParameterJdbcTemplate
spring-tx 模块⽀持对实现特殊接⼝的类和所有pojo(普通旧Java对象)进⾏编程式和声明式事务管理。
spring-orm 模块为流⾏的 object-relational mapping(对象-关系映射)API(包括JPA、JDO和Hibernate)提供了集成层。使⽤spring-orm模块,可以结合O/R映射框架与Spring提供的所有其他特性结合,如简单声明性事务管理特性。
spring-oxm模块提供了⼀个抽象层⽤于⽀持 Object/XML mapping (对象/XML映射)的实现,如JAXB、Castor、XMLBeans、JiBX和XStream。
spring-jms模块包含⽣成和消费消息的功能。从Spring4.1开始,提供了与spring-messaging模块的集成。
5、Web
Web层由spring-web、spring-webmvc、spring-websocket和spring-webmvc-portlet模块组成。
spring-web 模块提供了基本的⾯向web的集成功能。例如多部分⽂件上传功能,使⽤Servlet listeners和⾯向Web的应⽤程序上下⽂初始化IoC容器。它还包含HTTP客户端和Spring远程访问web相关的部分的⽀持。
spring-webmvc 模块(也称为Web servlet模块)包含Spring的模型-视图-控制器(model-view-controller,MVC)和Web应⽤程序的REST Web服务实现。Spring的MVC框架提供了domain model(域模型)代码和web form之间的完全分离,并集成了Spring框架的所有其他特性。
spring-websocket 模块主要是与 Web 前端的全双⼯通讯的协议。
spring-webmvc-portlet 模块(也称为Web-Portlet模块)提供了要在Portlet环境中使⽤的MVC实现,并反映了基于servlet的spring-webmvc模块的功能。(该模块在Spring5中移除)
spring-webflux 是⼀个新的⾮堵塞函数式 Reactive Web 框架, 可以⽤来建⽴异步的、⾮阻塞、事件驱动的服务,并且扩展性⾮常好。
(Spring5新模块)
6、Test
spring -test模块⽀持使⽤JUnit或TestNG对Spring组件进⾏单元测试和集成测试。它提供了Spring ApplicationContext的⼀致加载和这些上下⽂的缓存。它还提供了模拟对象,您可以使⽤这些模拟对象单独测试代码。
三、Spring 包之间的依赖关系
1.包列表
spring-core 核⼼⼯具类
spring-beans bean⽀持
spring-expression Spring表达式语⾔(SpEL)
spring-aop 基于代理的AOP⽀持
spring-aspects 基于AspectJ⽅⾯
spring-context 应⽤程序上下⽂运⾏时,包括调度和远程抽象
spring-context-support ⽀持将公共第三⽅库集成到Spring应⽤程序上下⽂中的类
spring-messaging ⽀持消息传递体系结构和协议
spring-instrument ⽤于JVM引导的插装代理
spring ioc注解spring-instrument-tomcat Tomcat的插装代理
spring-jdbc JDBC⽀持包,包括数据源设置和JDBC访问⽀持
spring-tx 事务基础设施,包括DAO⽀持和JCA集成
spring-orm 对象/关系映射,包括JPA和Hibernate⽀持
spring-oxm Object/XML Mipmg 对象/ XML映射
spring-jms JMS⽀持包,包括发送/接收JMS消息的帮助类
spring-test ⽀持单元测试和集成测试Spring组件
spring-web 基本的web⽀持,包括web客户机和基于web的远程处理
spring-webmvc Servlet栈的基于http的模型-视图-控制器和REST端点
spring-websocket WebSocket和SockJS基础架构,包括STOMP消息传递⽀持
spring-webmvc-portlet 要在Portlet环境中使⽤的MVC实现
2.依赖关系图
spring-core依赖了commons-logging,⽽其他模块都依赖了spring-core,所以整个spring框架都依赖了commons-logging,如果有⾃⼰的⽇志实现如log4j,可以排除对commons-logging的依赖,没有⽇志实现⽽排除了commons-logging依赖,编译报错
下图是spring4的jar之间的直接依赖图,在maven中配置spring依赖时不会再混乱了,简洁配置
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论