声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅。

1.了解SpringBoot的基本概念

2、具体内容 在之前所建立的 SpringBoot 项目只是根据官方文档实现的一个基础程序模型,但是这样的代码肯定不适合于实际的项目开发, 因为从实际的 Maven 项目来讲,应该要有统一的父 pom.xml 文件。

2.1、统一父 pom 管理

1、 首先建立一个 microboot 的 Maven 项目;

  1. <!--建立统一的父pom ,其他的子模块都统一用这个配置 -->
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>cn.study</groupId>
  6. <artifactId>microboot</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <!--packaging设置为pom -->
  9. <packaging>pom</packaging>
  10. <name>microboot</name>
  11. <url>http://maven.apache.org</url>
  12. <properties>
  13. <jdk.version>1.8</jdk.version>
  14. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  15. </properties>
  16. <dependencyManagement>
  17. <dependencies>
  18. <dependency>
  19. <groupId>org.springframework.boot</groupId>
  20. <artifactId>spring-boot-dependencies</artifactId>
  21. <version>1.5.4.RELEASE</version>
  22. <!--设置type和scope -->
  23. <type>pom</type>
  24. <scope>import</scope>
  25. </dependency>
  26. </dependencies>
  27. </dependencyManagement>
  28. <build>
  29. <finalName>microboot</finalName>
  30. <plugins>
  31. <plugin>
  32. <groupId>org.apache.maven.plugins</groupId>
  33. <artifactId>maven-compiler-plugin</artifactId>
  34. <configuration>
  35. <source>${jdk.version}</source><!-- 源代码使用的开发版本 -->
  36. <target>${jdk.version}</target><!-- 需要生成的目标class文件的编译版本 -->
  37. <encode>${project.build.sourceEncoding}</encode>
  38. </configuration>
  39. </plugin>
  40. </plugins>
  41. </build>
  42. <!--子模块 -->
  43. <modules>
  44. <module>microboot-base</module>
  45. </modules>
  46. </project>

2、 建立 microboot-base 的子模块,实现之前同样的基础操作功能,修改 pom.xml 文件,追加 SpringBoot 的 WEB 启动包(spring-boot-starter-web)

  1. <?xml version="1.0"?>
  2. <project
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
  4. xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  5. <modelVersion>4.0.0</modelVersion>
  6. <!--引用父配置microboot -->
  7. <parent>
  8. <groupId>cn.study</groupId>
  9. <artifactId>microboot</artifactId>
  10. <version>0.0.1-SNAPSHOT</version>
  11. </parent>
  12. <artifactId>microboot-base</artifactId>
  13. <name>microboot-base</name>
  14. <url>http://maven.apache.org</url>
  15. <properties>
  16. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  17. </properties>
  18. <dependencies>
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-starter-web</artifactId>
  22. </dependency>
  23.  
  24. <dependency>
  25. <groupId>junit</groupId>
  26. <artifactId>junit</artifactId>
  27. <scope>test</scope>
  28. </dependency>
  29.  
  30. </dependencies>
  31. </project> 

3、 建立与之前同样的程序类;

  1. package cn.study.microboot;
  2.  
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.ResponseBody;
  8.  
  9. @Controller
  10. @EnableAutoConfiguration
  11. public class SampleController {
  12. @RequestMapping("/")
  13. @ResponseBody
  14. String home() {
  15. return "www.study.cn";
  16. }
  17.  
  18. public static void main(String[] args) throws Exception {
  19. SpringApplication.run(SampleController.class, args);
  20. }
  21. }

在这样的状态下才可以进行后续的代码编写。

2.2、SpringBoot 代码测试

现在的程序里面已经实现了一个最为简单的控制器程序类,不过从实际的项目角度来讲,必须要求考虑到代码测试问题,而 且现在的程序代码属于 SpringBoot,则需要在你的项目之中进行如下的 pom.xml 文件的变更。

1、 【microboot-base 模块】修改 pom.xml 配置文件,追加 SpringBoot 测试支持类;

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-test</artifactId>
  4. <scope>test</scope>
  5. </dependency>
  6. <dependency>
  7. <groupId>junit</groupId>
  8. <artifactId>junit</artifactId>
  9. <scope>test</scope>
  10. </dependency>

只要进行 java 测试,最简单实用的就是 junit,所以这个开发包一定要随测试一起导入。 2、 【microboot-base 模块】建立一个测试程序类;

2、 【microboot-base 模块】建立一个测试程序类;

  1. package cn.study.microboot.test;
  2.  
  3. import javax.annotation.Resource;
  4.  
  5. import org.junit.Test;
  6. import org.junit.runner.RunWith;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  9. import org.springframework.test.context.web.WebAppConfiguration;
  10.  
  11. import cn.study.microboot.SampleController;
  12. import junit.framework.TestCase;
  13.  
  14. @SpringBootTest(classes = SampleController.class)
  15. @RunWith(SpringJUnit4ClassRunner.class)
  16. @WebAppConfiguration
  17. public class TestSampleController {
  18. @Resource
  19. private SampleController sampleController;
  20.  
  21. @Test
  22. public void testHome() {
  23. TestCase.assertEquals(this.sampleController.home(), "www.study.cn");
  24. }
  25. }

2.3、Spring 启动注解分析

现在为止已经可以发现在整个 SpringBoot 程序里面使用了许多的注解,首先把这些注解做一个列表:

可以发现在给定的几个注解之中“@EnableAutoConfiguration”为整个 SpringBoot 的启动注解配置,也就是说这个注解应该随着程序的主类一起进行定义。

而对于控制器程序类,由于在项目之中会有许多的控制器,那么最好将这些类统一保存在一个包中,下面将所有的控制器程序类保存在“cn.study.microboot.controller”,是“cn.study.microboot”子包。

强烈建议(Spring 官方建议):如果要想进行简单方便的开发,所有的程序类一定要在启动类所在包的子包下。

1、 【microboot-base 模块】建立一个 cn.study.microboot.controller.HelloController 程序类;

  1. package cn.study.microboot.controller;
  2.  
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.ResponseBody;
  6.  
  7. @Controller
  8. public class HelloController {
  9. @RequestMapping("/")
  10. @ResponseBody
  11. public String home() {
  12. return "www.study.cn";
  13. }
  14. }

2、 【microboot-base 模块】启动程序主类;

  1. package cn.study.microboot;
  2.  
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
  5. import org.springframework.context.annotation.ComponentScan;
  6.  
  7. @EnableAutoConfiguration
  8. @ComponentScan("cn.study.microboot") // 定义一个扫描路径
  9. public class SampleController {
  10. public static void main(String[] args) throws Exception {
  11. SpringApplication.run(SampleController.class, args);
  12. }
  13. }

3、 【microboot-base 模块】以上的做法只是传统程序的开发做法,因为现在为止毕竟是两块程序类,这两个彼此之间的联系需要 有一个连接点,而程序中配置的“@ComponentScan”就是负责这个连接处理,但是 SpringBoot 考虑到了此类的配置问题,所以提 出了一个更简化策略,该策略的核心思想:既然程序主类会在所有开发包的父包里面,那么能不能简化点取得配置呢?为此在实际 的开发之中,会使用一个特殊的复合注解:

  1. package cn.study.microboot;
  2.  
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5.  
  6. @SpringBootApplication // 启动SpringBoot程序,而后自带子包扫描
  7. public class SampleController {
  8. public static void main(String[] args) throws Exception {
  9. SpringApplication.run(SampleController.class, args);
  10. }
  11. }

@SpringBootApplication = @EnableAutoConfiguration + @ComponentScan + 其它配置。正是因为它有这样的特点,所以当 以后使用 Bean 实现配置处理的时候将会非常的容易。

 2.4、配置访问路径

在一个实际的项目开发之中,控制器的路径可能会有许多的个,而且在进行控制器编写的时候也会有两种运行模式:跳转配 置、Restful 显示。那么下面来观察关于路径的详细描述。

1、 在之前所编写的控制器里面你会发现有如下的两个注解配置使用:

· @Controller 在类上定义表示定义的是一个控制器;

· @ResponseBody:将控制器中方法的返回值变为 rest 内容。

但是如果说你现在一个项目里面可能控制器之中返回的全部都是Restful信息,这样分别定义就太麻烦了,为此在SpringBoot 里面又提供有一个复合注解:“@RestController”

  1. import org.springframework.web.bind.annotation.RequestMapping;
  2. import org.springframework.web.bind.annotation.RestController;
  3.  
  4. @RestController
  5. public class HelloController {
  6. @RequestMapping("/")
  7. public String home() {
  8. return "www.study.cn";
  9. }
  10. }

因为从 MVC 实际标准来讲,控制器需要传递一些属性到页面上进行显示,按照这样的原则并不是所有的开发都会以 Restful 结构返回,但是 Rest 结构是 SpringCloud 的实现核心技术

2、 现在所给出的控制器的类里面只是负责了简单的信息返回,那么实际上也可以进行参数的接收处理,传递参数到控制器之中 最简单的做法是使用地址重写传递“xx?参数名称=内容”;

  1. @RequestMapping("/echo")
  2. public String echo(String msg) {
  3. return "【ECHO】" + msg ;
  4. }

访问路径:http://localhost:8080/echo?msg=hello;

3、 由于 SpringBoot 支持 Rest 风格处理,所以此时对于参数的接收可以采用路径参数的形式完成:

  1. @RequestMapping(value="/echo/{message}",method=RequestMethod.GET)
  2. public String echo(@PathVariable("message") String msg) {
  3. return "【ECHO】" + msg ;
  4. }

访问路径:http://localhost:8080/echo/hello; 个人意见:虽然路径参数的形式属于 rest 操作标准

个人意见:虽然路径参数的形式属于 rest 操作标准,但是个人觉得使用地址重写传递参数更加简单,不过这一点使用什么样的模式来处理,取决于你所处的项目团队。

4、 在 SpringBoot 的处理操作之中实际上已经充分考虑到了此类情况,所以追加有自动加载配置的依赖库;

· 如果你现在的项目只是一个简单的 SpringBoot 的配置项目,则显示的项目信息如下:

· 【micro-base 模块】如果说你现在添加有如下的两个依赖库,修改 pom.xml 文件:

  1. <!--热启动 -->
  2. <dependency>
  3. <groupId>org.springframework</groupId>
  4. <artifactId>springloaded</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-devtools</artifactId>
  9. </dependency>

引入完成之后可以观察项目上的提示信息:

2.5、使用内置对象

通过整个SpringBoot 程序可以发现,在 SpringBoot 中的控制器的形式和 SpringMVC 是一样的,所以如果现在要想在你的程序之中去使用 JSP 的内置对象,那么也可以按照与 SpringMVC 同样的方式进行。

  1. @RequestMapping("/object")
  2. public String object(HttpServletRequest request,HttpServletResponse response) {
  3. System.out.println("*** 客户端IP地址:" + request.getRemoteAddr());
  4. System.out.println("*** 取得客户端响应编码:" + response.getCharacterEncoding());
  5. System.out.println("*** 取得SessionID:" + request.getSession().getId());
  6. System.out.println("*** 取得真实路径:" + request.getServletContext().getRealPath("/upload/"));
  7. return "www.study.cn" ;
  8. }

输出:

*** 客户端IP地址:0:0:0:0:0:0:0:1
*** 取得客户端响应编码:ISO-8859-1
*** 取得SessionID:35B3BFE058AEF7F3121B154EA47FA775
*** 取得真实路径:C:\Users\THINKPAD\AppData\Local\Temp\tomcat-docbase.2837993313407535911.8080\upload\

通过以上的信息可以发现,此时的 SpringBoot 运行依然需要有一个工作目录,只不过这个工作目录是由 SpringBoot 自己定义 的,主要就是当前用户的目录下存在。

 2.6、项目打包发布

SpringBoot 作为微架构实现主要技术,其发布项目的方式极为简单,只需要你在你的项目中配置好插件,以及打包就可以执行了,并且这个执行不需要特别复杂的配置。

1、 【microboot 项目】修改 pom.xml 配置文件,追加新的插件:

  1. <plugin> <!-- 该插件的主要功能是进行项目的打包发布处理 -->
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-maven-plugin</artifactId>
  4. <configuration> <!-- 设置程序执行的主类 -->
  5. <mainClass>cn.study.microboot.StartSpringBootMain</mainClass>
  6. </configuration>
  7. <executions>
  8. <execution>
  9. <goals>
  10. <goal>repackage</goal>
  11. </goals>
  12. </execution>
  13. </executions>
  14. </plugin>

由于增加了新的插件,所以对于整个的程序一定要进行整体的项目更新。

2、 【microboot-base 模块】将当前项目模块进行打包处理:clean package;

此时将形成“microboot.jar”程序文件,并且这个文件里面包含有全部的依赖支持库文件;

3、 将“microboot.jar”文件随意拷贝到一个路径之中,例如:D 盘,而后进入到命令行方式下:java -jar microboot.jar

如果此时要想在 Linux 下执行,只需要将这个*.jar 文件直接上传到 Linux 下即可。

SpringBoot系列三:SpringBoot基本概念(统一父 pom 管理、SpringBoot 代码测试、启动注解分析、配置访问路径、使用内置对象、项目打包发布)的更多相关文章

  1. 从零开始的JS生活(三)——内置对象

    咱们继续进行我们的正经的JS介绍.今天所要跟大家讲述的是JS中十分常用.十分常用.十分常用的内置对象. 一.世界上最熟悉的陌生就是,当你看着数组.而我看着你... - 数组对象 1.数组的概念 在内存 ...

  2. JavaWeb(三)JSP之3个指令、6个动作、9个内置对象和4大作用域

    前言 前面大概介绍了什么是JSP,今天我给大家介绍一下JSP的三个指令.6个动作以及它的9大内置对象.接下来我们就直接进入正题 一.JSP的3个指令 JSP指令(directive)是为JSP引擎而设 ...

  3. 一、JavaScript概述 二、JavaScript的语法 三、JavaScript的内置对象

    一.JavaScript的概述###<1>JavaScript的概念 又称ECMAScript,和java没有任何关系 嵌入在HTML元素中的 被浏览器解释运行的 一种脚本语言. ###& ...

  4. JavaScript的事件、DOM模型、事件流模型以及内置对象详解(三)

    JS中的事件 JS中的事件分类 1.鼠标事件: click/dbclick/mouseover/mouseout 2.HTML事件: onload/onunload/onsubmit/onresize ...

  5. Unit05: JavaScript对象概述 、 常用内置对象一 、 常用内置对象二 、 常用内置对象三

    Unit05: JavaScript对象概述 . 常用内置对象一 . 常用内置对象二 . 常用内置对象三 常用内置对象使用演示: <!DOCTYPE html> <html> ...

  6. jsp有哪些内置对象?作用分别是什么?(至少三个)

    jsp有哪些内置对象?作用分别是什么?(至少三个) 解答: 1)request表示HttpServletRequest对象.它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, head ...

  7. JSP的执行原理、JSP的内置对象、四大作用域解析、MVC模式理解>从零开始学JAVA系列

    目录 JSP的执行原理.JSP的内置对象.四大作用域解析.MVC模式理解 JSP的执行原理 这里拿一个小例子来解析JSP是如何被访问到的 首先将该项目部署到tomcat,并且通过tomcat启动 通过 ...

  8. springboot系列三、springboot 单元测试、配置访问路径、多个配置文件和多环境配置,项目打包发布

    一.单元测试 生成的demo里面包含spring-boot-starter-test :测试模块,包括JUnit.Hamcrest.Mockito,没有的手动加上. <dependency> ...

  9. SpringBoot系列三:SpringBoot自定义Starter

    在前面两章 SpringBoot入门 .SpringBoot自动配置原理 的学习后,我们对如何创建一个 SpringBoot 项目.SpringBoot 的运行原理以及自动配置等都有了一定的了解.如果 ...

随机推荐

  1. [SQL Server 2014] SQL Server 2014新特性探秘

    SQL Server 2014新特性探秘(1)-内存数据库   简介 SQL Server 2014提供了众多激动人心的新功能,但其中我想最让人期待的特性之一就要算内存数据库了.去年我再西雅图参加SQ ...

  2. angular.js测试框架protracotr安装所需的node版本

    protractor内代码的语法是基于ES6的,比如:里面用到了展开运算符“...”,node.js 6.0以下是不支持该语法特性. 所以,安装protractor是不会报错,但运行webdriver ...

  3. 每日英语:The Benefits of a Better Men's T-Shirt

    "I WEAR A T-shirt and jeans every single day," said Erik Schnakenberg, 30, co-founder of t ...

  4. Java获取某个月的天数

    https://blog.csdn.net/wtopps/article/details/48262221 ********************************************** ...

  5. [Java]随记--HttpClient发送put请求

    http://blog.csdn.net/u010989191/article/details/52852155 ******************************************* ...

  6. LeetCode: Partition List 解题报告

    Partition List Given a linked list and a value x, partition it such that all nodes less than x come ...

  7. Python调用jar包中的方法

    [本文出自天外归云的博客园] 需求 最近在后台项目代码中一段自定义的AES加解密的程序在平时的测试工作中应用频繁.因为写脚本经常会需要使用,而经过各种尝试,比如jpype等,都不尽如人意.最后转换思路 ...

  8. Git pull error: Your local changes to the following files would be overwritten by merge:

    联合开发,遇上的一个问题,果然,在此验证了百度的不靠谱,是谷歌出的答案...... stackoverflow上有解决方案,链接:http://stackoverflow.com/questions/ ...

  9. [转]ORA-01555错误总结(二)

    原文地址:http://blog.csdn.net/oradh/article/details/25683769 这篇文章紧接着上一篇“ORA-01555错误总结(一)”,主要描述延迟块清除导致的OR ...

  10. PostgreSQL ALTER TABLE中改变数据类型时USING的用法<转>

    在修改表字段类型的时候使用Using来进行显示的转换类型. 原文说明: SET DATA TYPE  This form changes the type of a column of a table ...