[有书共读16]Spring Boot 2:第一章

第一章

Spring 简介

  • Java EE平台特点
    • 稳定性能
    • 良好的开放性
    • 严格的安全性
  • Java EE应用行业
    • 对于信息化要求较高
    • 典型行业:银行、电信、证券、电子商务
    • 敲重点:学好java去应聘这些类型的公司的IT部门啊
  • Java EE和Spring的关系
    Java EE标准是一个接口。Spring是一个应用最广泛的实现。
    图片说明graph LR A[Java EE]--实际意义上的标准其实就是-->B[Spring];
  • Spring框架体系
    图片说明graph LR A((Spring))-->B[Spring Boot]; A-->C[Spring Cloud]; C-->D[Spring Cloud Data Flow]; A-->E[Spring Web Flow]; A-->F[Spring Security]; A-->G[Spring for Android]; A-->H[...]
  • 凭什么成为Java EE标准中的老大?Spring框架的优点:
    • 低侵入式设计,代码的污染极低。
    • 独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once ,Run Anywhere的承诺。
    • Spring的IoC窗口降低了业务对象替换的复杂性,提高了组件之间的解耦。
    • Spring的AOP支持允许将一些通用任务如:安全、事务、日志等进行集中式处理,从而提供了更好的利用性。
    • Spring的ORM提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问。
    • Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。
  • Spring框架组成
    • 核心容器(Core Container)
      • Spring-Core:核心工具类,Spring其他模块大量使用Spring-Core;
      • Spring-Beans:Spring定义Bean的支持;
      • Spring-Context:运行时Spring容器;
      • Spring-Context-Support:Spring容器对第三方包的集成支持;
      • Spring-Expression:使用表达式语言在运行时查询和操作对象;
    • AOP
      • Spring-AOP:基于***的AOP支持;
      • Spring-Aspects:基于AspectJ的AOP支持;
    • 消息(Messaging)
      • spring-Messaging:对消息架构和协议的支持。
    • Web
      • Spring-Web:提供基础的Web集成的功能,在Web项目中提供Spring的容器;
      • Spring-WebMVC:提供基于Servlet的Spring MVC;
      • Spring-WebSocket:提供WebSocket功能;
      • Spring-WebMVC-Portlet:提供Portlet环境支持;
    • 数据访问/集成(Data Access/Integration)
      • Spring-JDBC:提供以JDBC访问数据库的支持;
      • Spring-TX:提供编程式和声明式的事务支持;
      • Spring-ORM:提供对对象/关系映射技术的支持;
      • Spring-OXM:提供对对象/XML映射技术的支持;
      • Spring-JMS:提供对JMS的支持;
  • Spring生态圈

    • Spring Boot:使用默认开发配置来实现快速开发。
    • Spring XD:用来简化大数据应用开发。
    • Spring Cloud:为分布式系统开发提供工具集。
    • Spring Data:对主流的关系型和NoSQL数据库的支持。
    • Spring Integration:通过消息机制对企业集成模式(EIP)的支持。注:企业信息门户EIP(Enterprise Information Portal)
    • Spring Batch:简化及优化大量数据的批处理操作。
    • Spring Security:通过认证和授权保护应用。
    • Spring HATEOAS:基于HATEOAS原则简化REST服务开发。 (注:“超文本驱动”又名“将超媒体作为应用状态的引擎”(Hypermedia As The Engine Of Application State,来自Fielding博士论文中的一句话,缩写为HATEOAS。 http://www.infoq.com/cn/articles/understanding-restful-style/)
    • Spring Social:与社交网络API(如Facebook、新浪微博等)的集成。
    • Spring AMQP:对基于AMQP的消息的支持。
      注:AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计,如RabbitMQ等。
    • Spring Mobile:提供对手机设置检测的功能,给不同的设置返回不同的页面的支持。
    • Spring for Android:主要提供在Android上消费RESTful API的功能。
    • Spring Web Flow:基于Spring MVC提供基于向导流程式的Web应用开发。
    • Spring Web Services:提供了基于协议有限的SOAP/WEB服务。
    • Spring LDAP:简化使用LDAP开发。注:LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。
    • Spring Session:提供一个API及实现来管理用户会话信息。

      Spring Boot 简介

  • 解决问题:使用约定优先于配置(COC,Convention Over Configuration)的理念来解决Spring框架配置过多的问题。

  • Spring Boot优点
    • 使编码变得简单:推荐使用注解
    • 使配置变得简单:自动配置、快速构建项目、快速集成新技术的能力
    • 使部署变得简单:内嵌Tomcat、Jetty等Web容器
    • 使监控变得简单:自带项目监控。
  • Spring Boot的主要特征
    • (1)遵循“习惯优于配置”的原则,使用Spring Boot只需要很少的配置,大部分的时候我们直接使用默认的配置即可;
    • (2)项目快速搭建,可以无需配置的自动整合第三方的框架;
    • (3)可以完全不使用XML配置文件,只需要自动配置和Java Config;
    • (4)内嵌Servlet容器,降低了对环境的要求,可以使用命令直接执行项目,应用可用jar包执行:java -jar;
    • (5)提供了starter POM, 能够非常方便的进行包管理, 很大程度上减少了jar hell或者dependency hell;
    • (6)运行中应用状态的监控;
    • (7)对主流开发框架的无配置集成;
    • (8)与云计算的天然继承;
  • Spring Boot Starter
    • 打开SPRING INITIALIZR
    • 单击【Switch to the full version】
    • 会看到大约80个左右的自动配置依赖模块
    • 所有的spring-boot-starter模块都有约定的默认配置,但是允许开发者调整这些默认的配置用以改变默认的配置行为
    • Spring Boot的配置主要可以分为以下几类,其中优先级从高到底
      • 命令行参数
      • 系统环境变量
      • 位于文件系统中的配置文件
      • 位于classpath中的配置文件
      • 固化到代码中的配置
    • 实际项目开发中最常用的配置是配置文件,Spring Boot应用默认的配置文件名叫作application.properties
  • 日志依赖模块spring-boot-starter-logging

    • java的日志系统多种多样,可以通过如下配置在Maven中添加spring-boot-starter-logging依赖模块```

      org.springframework.boot
         spring-boot-starter-logging
      *   Spring Boot使用logback作为应用日志的框架,要想改变springBoot提供的应用日志设定,通过以下原则
          *   遵循logback的约定,使用自己定制的logback.xml日志文件
          *   logback.xm日志文件建议放在src/main/resources目录下,然后在application.properties中指定
      logging.config=logback.xml
          ```
  • Web开发依赖模块spring-boot-starter-web

    • 为了帮助开发者简化快速搭建过程并开发Web项目,Spring Boot提供了spring-boot-starter-web自动配置依赖模块```

      org.springframework.boot
          spring-boot-starter-web

      ```

    • 在当下项目运行mvn spring-boot:run就可以直接启用一个嵌套了tomcat的web应用。
      如果没有提供任何服务的Cotroller,访问任何路径都会返回一个springBoot默认的错误页面(Whitelabel error page)。
    • Spring Boot使用spring-boot-starter依赖模块开发Web项目,非常方便,简单,但是想要更好的使用spring-boot-starter-web依赖模块,还需要充分了解一些“约定”

      • 项目结构层面的约定
      • Spring MVC框架层面的约定
      • 嵌入式Web容器层面的约定

        下载和安装Maven

  • 下载和安装Maven请按如下步骤

    • 登陆(http://maven/apache/org/download.cgi)站点下载Maven最新版站点下载Maven最新版)
    • 将下载到的压缩文件加压缩到任意路径,此处将其解压缩到D:\路径下,解压缩后生成文件夹apache-maven-3.5.0
    • 配置Maven本地资源库

      • 在apache-maven-3.5.0文件夹下新建文件夹repository,用于充当本地资源库。打开apache-maven-3.5.0\conf\setting.xml文件,在元素下增加D:/apache-maven-3.5.0/repository

        Eclipse 集成Maven

  • 打开Eclipse,选择Window→Preferences→Maven→User Settings

    • Global Settings:全局设置,此处选择Maven的conf目录下的settings.xml
    • User Settings:用户设置,此处选择Maven的conf目录下的settings.xml
    • Local Repository:Maven的本地资源库,即创建的repository目录。

      Eclipse构建基于Maven和Spring Boot的项目

  • 创建一个新的Maven项目

    • 打开Eclipse,选择File→New→Others→Maven→Maven Project
  • Maven项目结构

  • 编写测试代码

    • 写一个简单的java类HelloController```
      import org.springframework.web.bind.annotation.RequestMapping
      import org.springframework.web.bind.annotation.RestController;
      public class HelloController{
      public String hello(){
      return "Hello Spring Boot!";
      }
      }
      ```
    • 修改Maven默认的App类```
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      public class App{
      public static void main(String[] args){
      SpringApplication.run(App.class,args);
      }
      }
      ```
    • 启动Spring Boot项目
      • 使用右键快捷菜单运行main方法。

Spring和Spring Boot

Spring

Spring框架是一个轻量级的企业级开发一站式解决方案。该解决方案包括:
  • 基于依赖注入的核心机制
  • 基于AOP(面向切面编程)的声明式事务管理
  • 多种持久层技术的整合
  • 优秀的Web MVC框架

    Spring框架是从实际开发中抽取出来的,因此完成了大量开发中的通用步骤,留给开发者的仅仅是与特定应用相关的部分,从而大大提高了企业应用的效率。Spring贯穿表现层、业务层、持久层,并能以高度开发性与已有的框架无缝整合。总结起来,Spring有如下优点:
  • 低侵入式设计,代码的污染极低

  • 独立与各种应用服务器,应用可以真正实现Write Once,Run Anywhere的承诺。
  • IoC(控制反转)降低了业务对象替换的复杂度,提高组件之间的耦合度。
  • AOP支持允许将一些通用任务如安全、事务、日志等进行集中式处理,提供了更好的复用性。
  • ORM(对象关系映射)提供了与第三方持久层框架的良好整合,简化了底层的数据库访问。
  • 高度开放性,不强制应用依赖与Spring,开发者自由选择部分或者全部。

image

模块化的Spring可供开发者自己选择需要的模块,其中Spring Core Container(即核心容器)是使用Spring框架时必要的,它代表了Spring框架的核心机制,由org.springframework.coreorg.springframework.beansorg.springframework.contextorg.springframework.expression四个包及其子包组成。

Spring Boot

Spring发展到今天衍生出了一系列框架,其中本书的主角Spring Boot就是其中之一。说了太多的Spring的优点,但在实际项目开发中会遇到一个最让人的问题,就是配置过多,需要大量的配置文件。Spring Boot的出现解决了这一问题。
Spring Boot采用“约定优先与配置”的理念设计了很多基于“开箱即用”的spring-boot-starter自动配置依赖模块。所有的模块都有约定的默认配置,但允许开发者进行调整。配置主要有以下几类(优先级:1->5):
  1. 命令行参数
  2. 系统环境变量
  3. 位于文件系统中的配置文件
  4. 位于classpath中的配置文件
  5. 固化到代码中的配置

高优先级方式提供的配置项会覆盖或者优先生效。

约定又有下面这些:

1、项目结构层面的约定 。Spring Boot项目的静态文件和页面统一放在src/main/resources目录对应的子目录下。

2、Spring MVC框架层面的约定。spring-boot-starter-web依赖模块默认自动配置了一些MVC组件如:ViewResolver(视图解析器)、Converter和Formatter(转换器)、HttpMessageConverter、MessageCodesResolver

3、嵌入式Web容器层面的约定。默认使用嵌入式Tomcat,8080端口。

全部评论

相关推荐

投递美团等公司10个岗位
点赞 评论 收藏
转发
点赞 7 评论
分享
牛客网
牛客企业服务