读书笔记------《Spring实战》

书名:Spring实战(第4版)

ISBN:978-7-115-41730-5 人民邮电出版社

前言:这本书主要分四部分

  1. Spring框架核心知识
  2. Spring构建Web应用程序
  3. 后端使用Spring
  4. Spring与其他应用程序进行集成(PS:SpringBoot)

Chapter One:The Core of Spring

Spring最底层两个核心:

  • DI依赖注入(dependenc injection)
  • AOP面向切面编程(aspect-oriented programm)

1.1 简化Java开发

Spring极力避免自身API影响代码,非侵入编程就是类在不在Spring应用中都可以发挥它的作用。

依赖注入并不复杂,可以让我们的代码更加简洁容易理解。首先要理解--耦合。耦合具有两面性,紧密耦合代码难以测试、复用、理解。修复一个bug出来十个bug。但是一定程度的耦合是必须的,要不没有了类之间交互就不能完成功能。

通过DI,对象依赖关系会有系统中第三方组件在创建对象时候设定好。创建应用组件之间协作的行为通常称为装配(wiring),Spring有多种装配bean的方式,采用XML是很常见的一种装配方式。

Spring通过应用上下文(Application Context)装载bean的定义并把它们组装起来。Spring应用上下文全权负责对象的创建和组装。Spring自带了多种应用上下文的实现,它们之间主要的区别在于如何加载配置。

1.2 Bean

Spring 应用中 ,对象生存在Spring容器之中Container,容器负责创建对象,装配他们。

Spring自带了多个容器实现。Bean工厂(org.springFramework.beans.factory.eanFactory)、应用上下文(org.springframework.context.ApplicationContext)基于BeanFactory构建,并提供应用框架级别的服务,例如从属性文件解析文本信息以及发布应用事件给感兴趣的事件监听者。主要还是使用应用上下文。

Spring自带了多种类型的应用上下文。

  • AnnotationConfigApplicationContext:从一个或多个基于Java的配置类中加载Spring应用上下文。
  • AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置类中加载Spring Web应用上下文。
  • ClassPathXmlApplicationContext:从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源。
  • FileSystemXmlapplicationcontext:从文件系统下的一个或多个XML配置文件中加载上下文定义。

XmlWebApplicationContext:从Web应用下的一个或多个XML配置文件中加载上下文定义。

Spring核心容器

容器是Spring框架最核心的部分,它管理着Spring应用中bean的创建、配置和管理。在该模块中,包括了Spring bean工厂,它为Spring提供了DI的功能。基于bean工厂,我们还会发现有Spring应用上下文的实现,每一种都提供了配置Spring的不同方式。除了bean工厂和应用上下文,该模块也提供了许多企业服务,例如E-mail、JNDI访问、EJB集成和调度。所有的Spring模块都构建于核心容器之上。当你配置应用时,其实你隐式地使用了这些类。贯穿本书,我们都会涉及到核心模块,在第

Spring的AOP模块

在AOP模块中,Spring对面向切面编程提供了丰富的支持。这个模块是Spring应用系统中开发切面的基础。与DI一样,AOP可以帮助应用对象解耦。借助于AOP,可以将遍布系统的关注点(例如事务和安全)从它们所应用的对象中解耦出来。

数据访问与集成

使用JDBC编写代码通常会导致大量的样板式代码,例如获得数据库连接、创建语句、处理结果集到最后关闭数据库连接。Spring的JDBC和DAO(Data Access Object)模块抽象了这些样板式代码,使我们的数据库代码变得简单明了,还可以避免因为关闭数据库资源失败而引发的问题。该模块在多种数据库服务的错误信息之上构建了一个语义丰富的异常层,以后我们再也不需要解释那些隐晦专有的SQL错误信息了!对于那些更喜欢ORM(Object-Relational Mapping)工具而不愿意直接使JDBC的开发者,Spring提供了ORM模块。Spring的ORM模块建立在对DAO的支持之上,并为多个ORM框架提供了一种构建DAO的简便方式。Spring没有尝试去创建自己的ORM解决方案,而是对许多流行的ORM框架进行了集成,包括Hibernate、Java Persisternce API、Java Data Object和iBATIS SQL Maps。Spring的事务管理支持所有的ORM框架以及JDBC。

Web与远程调用

MVC(Model-View-Controller)模式是一种普遍被接受的构建Web应用的方法,它可以帮助用户将界面逻辑与应用逻辑分离。Java从来不缺少MVC框架,Apache的Struts、JSF、WebWork和Tapestry都是可选的最流行的MVC框架。虽然Spring能够与多种流行的MVC框架进行集成,但它的Web和远程

调用模块自带了一个强大的MVC框架,有助于在Web层提升应用的松耦合水平。在第5章到第7章中,我们将会学习Spring的MVC框架。除了面向用户的Web应用,该模块还提供了多种构建与其他应用交互的远程调用方案。Spring远程调用功能集成了RMI(Remote MethodInvocation)、Hessian、Burlap、JAX-WS,同时Spring还自带了一个远程调用框架:HTTP invoker。Spring还提供了暴露和使用REST API的良好支持。

1.3 构建于核心Spring框架之上的框架和类库

Spring Web Flow

Spring Web Flow建立于Spring MVC框架之上,它为基于流程的会话式Web应用(可以想一下购物车或者向导功能)提供了支持。我们将在第8章讨论更多关于Spring Web Flow的内容,你还可以访问Spring WebFlow的主页(http://projects.spring.io/spring-webflow/)。

Spring Web Service

虽然核心的Spring框架提供了将Spring bean以声明的方式发布为WebService的功能,但是这些服务是基于一个具有争议性的架构(拙劣的契约后置模型)之上而构建的。这些服务的契约由bean的接口来决定。 Spring Web Service提供了契约优先的Web Service模型,服务的实现都是为了满足服务的契约而编写的。本书不会再探讨Spring Web Service,但是你可以浏览站http://docs.spring.io/spring- ws/site/来了解更多关于Spring Web Service的信息。

Spring Security

安全对于许多应用都是一个非常关键的切面。利用Spring AOP,Spring Security为Spring应用提供了声明式的安全机制。你将会在第9章看到如何为应用的Web层添加Spring Security功能。同时,我们还会在第14章重新回到Spring Security的话题,学习如何保护方法调用。你可以在主页http://projects.spring.io/spring-security/上获得关于SpringSecurity的更多信息。

Spring Integration #再议 Spring Batch 批处理 #再议 Spring Social #再议 Spring Mobile#再议 Spring for Android

Spring Data

Spring Data使得在Spring中使用任何数据库都变得非常容易。尽管关系型数据库统治企业级应用多年,但是现代化的应用正在认识到并不是所有的数据都适合放在一张表中的行和列中。一种新的数据库种类,通常被称之为NoSQL数据库 [2] ,提供了使用数据的新方法,这些方法会比传统的关系型数据库更为合适。不管你使用文档数据库,如MongoDB,图数据库,如Neo4j,还是传统的关系型数据库,Spring Data都为持久化提供了一种简单的编程模型。这包括为多种数据库类型提供了一种自动化的Repository机制,它负责为你创建Repository的实现。我们将会在第11章看到如何使用Spring Data简化Java PersistenceAPI(JPA)开发,然后在第12章,将相关的讨论拓展至几种NoSQL数据库。

Spring Boot

Spring极大地简化了众多的编程任务,减少甚至消除了很多样板式代码,如果没有Spring的话,在日常工作中你不得不编写这样的样板代码。Spring Boot是一个崭新的令人兴奋的项目,它以Spring的视角,致力于简化Spring本身。Spring Boot大量依赖于自动配置技术,它能够消除大部分(在很多场

景中,甚至是全部)Spring配置。它还提供了多个Starter项目,不管你使用Maven还是Gradle,这都能减少Spring工程构建文件的大小。在本书即将结束的第21章,我们将会学习Spring Boot。

总结:

介绍了Spring功能特性,简化Java开发,促进代码的松散耦合。关键是DI依赖注入和AOP。

DI是组装应用对象的一种方式,借助这种方式对象无需知道依赖来自何处或者依赖的实现方式。不同

于自己获取依赖对象,对象会在运行期赋予它们所依赖的对象。依赖对象通常会通过接口了解所注入的对象,这样的话就能确保低耦合。AOP可以帮助应用将散落在各处的逻辑汇集于一处——切面。当Spring装配bean的时,这些切面能够在运行期编织起来,这样就能非常有效地赋予bean新的行为。

理解DI和AOP,才有能力使用Spring框架的其他功能。

Chapter05 Spring Web应用程序

5.1 SpringMVC请求

       第一站是Spring的DispatcherServlet-前端控制器。把请求发送给SpringMVC控制器Controller,控制器有很多,所以前端控制器会查询Handler Mapping-映射器。来确定请求的下一站,处理器映射器会根据请求携带URL决策,发现了合适的控制器,前端控制器把请求发给控制器,控制器处理后返回模型-model还有视图-view。打包信息,标出视图名称发送回前端控制器!控制器使用视图解析器view-Resolver来匹配视图。然后前端控制器就知道是哪个视图了,把视图响应给客户端。

Chapter 21 借助Spring Boot简化Spring开发

在Spring家族中,Spring Boot是令人兴奋(也许我敢说它是改变游戏规则的)的新项目。它提供了四个主要的特性,能够改变开发Spring应用程序的方式:

  • Spring Boot Starter:它将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中。
  • 自动配置:Spring Boot的自动配置特性利用了Spring 4对条件化配置的支持,合理地推测应用所需的bean并自动化配置它们。
  • 命令行接口(Command-line interface,CLI):Spring Boot的CLI发挥了Groovy编程语言的优势,并结合自动配置进一步简化Spring应用的开发。
  • Actuator:它为Spring Boot应用添加了一定的管理特性。

如果查看这些Starter依赖的内部原理,你会发现Starter的工作方式也没有什么神秘之处。它使用了Maven和Gradle的依赖传递方案,Starter在自己的pom.xml文件中声明了多个依赖。当我们将某一个Starter依赖添加到Maven或Gradle构建中的时候,Starter的依赖将会自动地传递性解析。这些依赖本身可能也会有其他的依赖。一个Starter可能会传递性地引入几十个依赖。需要注意,很多Starter引用了其他的Starter。例如,mobile Starter就引用了Web Starter,而后者又引用了Tomcat Starter。大多数的Starter都会引用spring-boot-starter,它实际上是一个基础的Starter(当然,它也依赖了logging Starter)。依赖是传递性的,将mobile Starter添加为依赖之后,就相当于添加了它下面的所有Starter。

发布了62 篇原创文章 · 获赞 94 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/m0_37676429/article/details/103830501