抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Spring框架的特性与优势

  • 特性
    • 非侵入式:基于Spring开发的应用中的对象可以不依赖于Spring的API
    • 控制反转:IOC(Inversion of control),指的是将对象的创建权交给Spring去创建。使用Spring之前,对象的创建都是由我们在代码new出来的,使用Spring之后,对象的创建就可以交给Spring框架。
    • 依赖注入:DI(Dependency Injection),是指依赖的对象不需要手动的调用set方法去设置,而是通过配置赋值。
    • 面向切面:AOP(Aspect Oriented Programming)
    • 容器:Spring是一个容器,以为它包含并且管理引用对象的生命周期
    • 组件化:Spring实现了使用简单的组件配置组合成一个复杂的应用。在Spring中可以使用XML和Java注解组合这些对象。
    • 一站式: 在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上 Spring 自身也提供了表现层的 Spring MVC 和持久层的 Spring JDBC)
  • 好处
    • Spring 可以使开发人员使用 POJOs 开发企业级的应用程序。只使用 POJOs 的好处是你不需要一个 EJB 容器产品,比如一个应用程序服务器,但是你可以选择使用一个健壮的 servlet 容器,比如 Tomcat 或者一些商业产品。
    • Spring 在一个单元模式中是有组织的。即使包和类的数量非常大,你只要担心你需要的,而其它的就可以忽略了。
    • Spring 不会让你白费力气做重复工作,它真正的利用了一些现有的技术,像 ORM 框架、日志框架、JEE、Quartz 和 JDK 计时器,其他视图技术。
    • 测试一个用 Spring 编写的应用程序很容易,因为环境相关的代码被移动到这个框架中。此外,通过使用 JavaBean-style POJOs,它在使用依赖注入注入测试数据时变得更容易。
    • Spring 的 web 框架是一个设计良好的 web MVC 框架,它为比如 Structs 或者其他工程上的或者不怎么受欢迎的 web 框架提供了一个很好的供替代的选择。MVC 模式导致应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑)分离,同时提供这些元素之间的松散耦合。模型(Model)封装了应用程序数据,通常它们将由 POJO 类组成。视图(View)负责渲染模型数据,一般来说它生成客户端浏览器可以解释 HTML 输出。控制器(Controller)负责处理用户请求并构建适当的模型,并将其传递给视图进行渲染。
    • Spring 对 JavaEE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低。
    • 轻量级的 IOC 容器往往是轻量级的,例如,特别是当与 EJB 容器相比的时候。这有利于在内存和 CPU 资源有限的计算机上开发和部署应用程序。
    • Spring 提供了一致的事务管理接口,可向下扩展到(使用一个单一的数据库,例如)本地事务并扩展到全局事务(例如,使用 JTA)

组件

1️⃣Core Container(Spring核心容器)

  • Beans模块:提供了框架的基础部分,包括控制反转和依赖注入。
  • Core模块:封装了Spring框架的底层部分,包括资源访问、类型转换以及一些常用的工具类。
  • Context上下文模块:建立在Core和Beans两个模块的基础之上,集成Beans模块的功能并添加了资源绑定、数据验证、国际化、Java EE支持、容器生命周期、事件传播等。ApplicationContext接口是上下文模块的焦点。
  • SpEl:提供了强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从Spring容器获取Bean,也支持列表投影、悬着和一般的列表聚合。

2️⃣Data Access/Integration(数据访问/集成)

  • JDBC模块:提供了一个JBDC的样例模块,使用这些模块能消除传统冗长的JDBC编码还有必须的事务控制,而且能享受到Spring管理事务的好处。
  • ORM模块:提供与流行的"对象-关系"映射框架无缝集成的API,包括JPA、JDO、Hibernate和Mybatis等。而且还可以使用Spring事务管理。
  • OXM模块:提供了一个支持Object/XML映射的抽象层实现。如JAXB、Castor、XMLBeans、JiBX和XStream。将Java对象映射成XML数据,或者将XML数据映射成Java对象。
  • JMS模块:指Java消息服务,提供一套"消息生产者/消费者"模块用于更简单的使用JMS,JMS用于两个应用程序之间,或分布式系统中发送消息,进行异步通信。
  • Transaction事务模块:支持编程和声明式事务管理。

3️⃣Web模块

  • Web模块:提供了基本的Web开发集成特性,例如多文件上传功能,使用的Servlet监听器和IOC容器初始化以及Web应用上下文。
  • Servlet模块:提供了一个Spring MVC Web框架的是心啊。Spring MVC框架提供了基于注解的请求资源注入,更简单的数据绑定、数据验证等及一套非常易用的JSP标签,完全无缝与Spring其他技术协作。
  • Web Socket模块:提供了简单的接口,用户只要实现响应的接口就可以快速搭建Web Socket Server,从而实现双向通讯。
  • Webfulx模块:Spring WebFlux是Spring Framework5.x中引入的新的响应式web框架。和Spring MVC不同,它不需要Servlet API,是完全异步非阻塞的,并且通过Reactor实现了Reactive Streams规范。Spring WebFlux用于创建基于事件循环执行模型的完全异步且非阻塞的应用程序。
  • Portlet模块:提供了在Portlet环境中使用MVC实现,类似Web-Servlet模块的功能。 (此外Spring4.x中还有Portlet 模块,在Spring 5.x中已经移除 。)

4️⃣AOP、Aspect、Instrumentation和Messaging

  • AOP模块:提供了面向切面编程实现,提供比如日志记录、权限控制、线程统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中,这样各司其职,降低业务逻辑和通用功能的解耦。
  • Aspects模块:提供与AspectJ的集成,是一个功能强大且成熟的面向切面编程的(AOP)框架。
  • Instrumentation模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。
  • messaging模块:Spring 4.0以后新增了雄安锡(Spring-messaging)模块,该模块提供了对消息传递体系结构的协议的支持。
  • jcl模块:Spring 5.x中新增了日志框架集成的模块。

5️⃣Test模块

Test 模块:Spring 支持 Junit 和 TestNG 测试框架,而且还额外提供了一些基于 Spring 的测试功能,比如在测试 Web 框架时,模拟 Http 请求的功能。

包含Mock Objects, TestContext Framework, Spring MVC Test, WebTestClient。

评论