Spring是一个开源轻量级的Java 开发框架。
Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。
1.1.2 Spring是如何简化Java开发的为了降低Java开发的复杂性,Spring采用了以下4种关键策略:
基于POJO的轻量级和最小侵入性编程,所有东西都是bean;通过IOC,依赖注入(DI)和面向接口实现松耦合;基于切面(AOP)和惯例进行声明式编程;通过切面和模版减少样式代码,RedisTemplate,xxxTemplate; 1.1.3 什么是SpringBoot
Spring Boot 基于 Spring 开发,Spirng Boot 本身并不提供 Spring 框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于 Spring 框架的应用程序。也就是说,它并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具。
Spring Boot 以约定大于配置的核心思想,默认帮我们进行了很多设置,多数 Spring Boot 应用只需要很少的 Spring 配置(基于 Java 的配置),开发者能够更加专注于业务逻辑。同时它集成了大量常用的第三方库配置(例如 Redis、MongoDB、Jpa、RabbitMQ、Quartz 等等),Spring Boot 应用中这些第三方库几乎可以零配置的开箱即用。
1.1.4 Spring Boot优点我们以下图来说明:
Spring Boot 是伴随着 Spring 4.0 诞生的,从字面理解,Boot是引导的意思,因此 Spring Boot 旨在帮助开发者快速搭建 Spring 框架。Spring Boot 继承了原有 Spring 框架的优秀基因,使 Spring 在使用中更加方便快捷。
举个例子,比如我们要创建一个 web 项目,使用 Spring 的朋友都知道,在使用 Spring 的时候,需要在 pom 文件中添加多个依赖,而 Spring Boot 则会帮助开发着快速启动一个 web 容器,在 Spring Boot 中,我们只需要在 pom 文件中添加如下一个 starter-web 依赖即可。
org.springframework.boot spring-boot-starter-web
我们点击进入该依赖后可以看到,Spring Boot 这个 starter-web 已经包含了多个依赖,包括之前在 Spring 工程中需要导入的依赖,我们看一下其中的一部分,如下:
org.springframework spring-web5.0.7.RELEASE compile org.springframework spring-webmvc5.0.7.RELEASE compile
由此可以看出,Spring Boot 大大简化了我们的编码,我们不用一个个导入依赖,直接一个依赖即可。
1.1.4.3 简化配置Spring 虽然是Java EE轻量级框架,但由于其繁琐的配置,一度被人认为是“配置地狱”。各种XML、Annotation配置会让人眼花缭乱,而且配置多的话,如果出错了也很难找出原因。Spring Boot更多的是采用 Java Config 的方式,对 Spring 进行配置。举个例子:
我新建一个类,但是我不用 @Service注解,也就是说,它是个普通的类,那么我们如何使它也成为一个 Bean 让 Spring 去管理呢?只需要@Configuration 和@Bean两个注解即可,如下:
public class TestService {
public String sayHello () {
return "Hello Spring Boot!";
}
}
---------------------------------------------------------
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JavaConfig {
@Bean
public TestService getTestService() {
return new TestService();
}
}
@Configuration表示该类是个配置类,@Bean表示该方法返回一个 Bean。这样就把TestService作为 Bean 让 Spring 去管理了,在其他地方,我们如果需要使用该 Bean,和原来一样,直接使用@Resource注解注入进来即可使用,非常方便。
1.1.4.4 简化部署在使用 Spring 时,项目部署时需要我们在服务器上部署 tomcat,然后把项目打成 war 包扔到 tomcat里,在使用 Spring Boot 后,我们不需要在服务器上去部署 tomcat,因为 Spring Boot 内嵌了 tomcat,我们只需要将项目打成 jar 包,使用 java -jar xxx.jar一键式启动项目。
另外,也降低对运行环境的基本要求,环境变量中有JDK即可。
1.1.4.5 小结通俗的说来,大概有如下优势:
为所有Spring开发者更快的入门开箱即用,提供各种默认配置来简化项目配置内嵌式容器简化Web项目没有冗余代码生成和XML配置的要求 1.2 Hello,World 1.2.1 准备工作
我们将学习如何快速的创建一个Spring Boot应用,并且实现一个简单的Http请求处理。
通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单、开发快速的特性。
我的环境准备:
java version “1.8.0_181”Maven-3.6.1SpringBoot 2.x 最新版
开发工具:
IDEA 1.2.2 创建基础项目说明
Spring官方提供了非常方便的工具让我们快速构建应用
Spring Initializr:https://start.spring.io/
1.2.2.1 项目创建方式一:使用Spring Initializr 的 Web页面创建项目打开 https://start.spring.io/填写项目信息点击”Generate Project“按钮生成项目;下载此项目解压项目包,并用IDEA以Maven项目导入,一路下一步即可,直到项目导入完毕。如果是第一次使用,可能速度会比较慢,包比较多、需要耐心等待一切就绪。 1.2.2.2 项目创建方式二:使用 IDEA 直接创建项目
创建一个新项目选择spring initalizr , 可以看到默认就是去官网的快速构建工具那里实现填写项目信息选择初始化的组件(初学勾选 Web 即可)填写项目路径等待项目构建成功 1.2.2.3 项目结构分析:
通过上面步骤完成了基础项目的创建。就会自动生成以下文件:
程序的主启动类一个 application.properties 配置文件一个 测试类一个 pom.xml 1.2.2.3 pom.xml 分析
打开pom.xml,看看Spring Boot项目的依赖:
1.2.2.4 编写一个http接口org.springframework.boot spring-boot-starter-parent2.2.5.RELEASE org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-testtest org.junit.vintage junit-vintage-engineorg.springframework.boot spring-boot-maven-plugin
1、在主程序的同级目录下,新建一个controller包,一定要在同级目录下,否则识别不到
2、在包中新建一个HelloController类
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "Hello World";
}
}
3、编写完毕后,从主程序启动项目,浏览器发起请求,看页面返回;控制台输出了 Tomcat 访问的端口号!
Spring Boot是支持发布jar包和war的,但它推荐的是使用jar形式发布。使用jar包比较方便,但如果是频繁修改更新的项目,需要打补丁包,那这么大的jar包上传都是问题。所以,jar包不一定合适适用所有的场景,如war包更合适,你可以尝试转为传统的war包,这样打补丁包可能更方便。
1.2.3.1 修改Spring Boot启动类启动类继承 SpringBootServletInitializer类,并覆盖 configure方法。
下面是Spring Boot提供的示例代码:
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
1.2.3.2 修改jar为war包形式
在pom文件中,添加war包配置。
war
如果不添加,默认为jar包。
1.2.3.3 去除Spring Boot内置Tomcat修改自带tomcat依赖范围为provided,防止与外部tomcat发生冲突
也是最重要的步骤,就是修改完后不要运行该项目,会报错的。
因为这个是为打包而设计的方案,如果大家想要运行项目的话,一定要把spring-boot-starter-tomcat中provided 注释掉才可以运行,不然肯定会出错,这点大家一定要注意。
org.springframework.boot spring-boot-starter-tomcat provided
将项目打成jar包,点击 maven的 package
如果遇到以上错误,可以配置打包时 跳过项目运行测试用例
org.apache.maven.plugins maven-surefire-plugin true
如果打包成功,则会在target目录下生成一个 jar 包
打成了jar包后,就可以在任何地方运行了!
打包成war包也是类似的。
如果你用的是继承spring-boot-starter-parent的形式使用Spring Boot,那可以跳过,因为它已经帮你配置好了。如果你使用的依赖spring-boot-dependencies形式,你需要添加以下插件。
Spring Boot Maven Plugin插件能够将Spring Boot应用打包为可执行的jar或war文件,执行springboot应用
org.apache.maven.plugins maven-war-plugin false
failOnMissingWebXml需要开启为false,不然打包会报没有web.xml错误。
安装Spring Boot Maven Plugin插件的条件:
1.2.3.5 spring-boot-maven-plugin插件Spring Boot 的Maven插件(Spring Boot Maven plugin) 能够以Maven的方式为应用提供Spring Boot 的支持,即为Spring Boot应用提供了执行Maven操作的可能
Spring Boot Maven Plugin能够将Spring Boot应用打包为可执行的jar或war文件,执行springboot应用。
1、安装Spring Boot Maven Plugin插件的条件:
(1)如果POM是继承spring-boot-starter-parent的话,只需要指定以下内容就行:
1.8 com.myproject.PortalutilApplication
(2)如果POM不是继承spring-boot-starter-parent的话,就需要安装spring-boot-maven-plugin插件,如下:
projectByMyself org.springframework.boot spring-boot-maven-plugin 2.0.1.RELEASE ${start-class} ZIP repackage
1、设置了就会按照自己设定的名字作为包名
2、如果没有设置,打包后的包名为:artifactId与version拼接的结果
如下图:
${start-class} 其实就是项目的启动类,例如:com.myproject.PortalutilApplication
layout属性的值可以如下:
1、JAR,即通常的可执行jar
2、WAR,即通常的可执行war
3、ZIP,即DIR,类似于JAR
4、MODULE,将所有的依赖库打包(scope为provided的除外),但是不打包Spring Boot的任何Launcher
5、NONE,将所有的依赖库打包,但是不打包Spring Boot的任何Launcher
现在IDEA是最火的java集成开发环境,经常会用到一些maven命令进行必要的操作(例如打jar包),所以在这里做一些简单的总结:
1.2.4.1 常用打包命令mvn clean package -Dmaven.test.skip=true 跳过单测打包 mvn clean install -Dmaven.test.skip=true 跳过单测打包,并把打好的包上传到本地仓库 mvn clean deploy -Dmaven.test.skip=true 跳过单测打包,并把打好的包上传到远程仓库1.2.4.2 常用命令列表
mvn -v //查看版本 mvn archetype:create //创建 Maven 项目 mvn compile //编译源代码 mvn test-compile //编译测试代码 mvn test //运行应用程序中的单元测试 mvn site //生成项目相关信息的网站 mvn package //依据项目生成 jar 文件 mvn install //在本地 Repository 中安装 jar mvn -Dmaven.test.skip=true //忽略测试文档编译 mvn clean //清除目标目录中的生成结果 mvn clean compile //将.java类编译为.class文件 mvn clean package //进行打包 mvn clean test //执行单元测试 mvn clean deploy //部署到版本仓库 mvn clean install //使其他项目使用这个jar,会安装到maven本地仓库中 mvn archetype:generate //创建项目架构 mvn dependency:list //查看已解析依赖 mvn dependency:tree //看到依赖树 mvn dependency:analyze //查看依赖的工具 mvn help:system //从中央仓库下载文件至本地仓库 mvn help:active-profiles //查看当前激活的profiles mvn help:all-profiles //查看所有profiles mvn help:effective -pom //查看完整的pom信息
注意
maven 命令要在IDEA的Terminal窗口执行
执行maven命令需要当前目录有pom依赖,可以用cd命令切换目录
如何更改启动时显示的字符拼成的字母,SpringBoot呢?也就是 banner 图案;
只需一步:到项目下的 resources 目录下新建一个banner.txt 即可。
图案可以到:https://www.bootschool.net/ascii 这个网站生成,然后拷贝到文件中即可!



