第一、Spring Boot的诞生
虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。
第一阶段:XML配置
在Spring 1.x时代,使用Spring开发满眼都是XML配置的Bean,随着项目的扩大,我们需要把XML配置文件放到不同的配置文件夹里,那时需要频繁的在开发的类和配置文件之间进行切换。
第二阶段:注解配置
在Spring2.x时代,随着JDK1.5带来的注解支持,Spring提供了声明Bean的注解(例如@Component,@Service),大大减少了配置量。主要使用的方式是应用的基本配置(如数据库配置)用XML,业务配置用注解。
第三阶段:Java配置
Spring3.0引入了基于java的配置能力,这是一种类型安全的可重构配置方式,可以替代XML,我们目前刚好处于这个时代,Spring4.x和Spring Boot都推荐使用Java配置。
所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以写配置挤占了写应用程序逻辑的时间。除此之外,项目的依赖管理也是件吃力不讨好的事情。决定项目里要用哪些库就已经够让人头痛的了,你还要知道这些库的哪个版本和其他库不会有冲突,这难题实在太棘手。并且,依赖管理也是一种损耗,添加依赖不是写应用程序代码,一旦选错了依赖的版本,随之而来的不兼容问题毫无疑问会是生产力杀手。
Spring Boot让这一切成为了过去。
Spring Boot简化了基于Spring的应用的开发,只需要run就能创建一个独立的,生产级别的spring应用。Spring Boot为Spring平台及第三方库提供开箱即用的设置(提供默认设置),这样我们可以简单的开始,多数Spring Boot应用只需要很少的Spring配置。
Spring Boot主要目标是
1.为所有Spring的开发提供一个从根本上更快地入门体验。
2.开箱即用,但通过自己设置参数,即可快速摆脱这种方式。
3.提供了一些大型项目中常见的功能性特性,如内嵌服务器,安全,指标,健康监测,外部化配置等
4.绝对没有代码生成,也无需XML配置。
第二、Spring Boot环境准备
工具 | 版本 |
---|---|
JDK | 1.8以上 |
Spring Boot | 2.1.6 |
maven | 3.5 |
第三、新建Maven工程,修改pom.xml文件,引入Jar
pom.xml文件如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.shi</groupId>
<artifactId>SpringBoot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
<include>**/*.html</include>
<include>/static/</include>
</includes>
</resource>
</resources>
</build>
</project>
若发现部分jar无法下载成功,可以在maven中的settings.xml文件中增加下面一段配置
<!-- 阿里云仓库 -->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
第三、上手写代码
1.com.shi.SpringBootRunApplication.java
package com.shi;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* SpringBoot 启动类(引导类)
* @author shixiangcheng
* 2019-09-07
*/
@SpringBootApplication//表面当前类是SpringBoot的引导类
public class SpringBootRunApplication {
public static void main(String[] args) {
System.out.println("start spring boot");
SpringApplication.run(SpringBootRunApplication.class, args);
}
}
2.com.shi.controller.UserController.java
package com.shi.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.shi.dto.User;
/**
* 示例
* @author shixiangcheng
* 2019-09-07
*/
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("/sayHi")
public String sayHi(){
return "Hello Spring Boot";
}
@RequestMapping("/query")
public User query(){
User user=new User();
user.setId("1");
user.setName("小小大侠客");
return user;
}
}
3.com.shi.dto.User.java
package com.shi.dto;
import java.io.Serializable;
/**
* 实体类
* @author shixiangcheng
* 2019-09-07
*/
public class User implements Serializable{
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4.Run As—> Java Application 运行引导类
启动成功
start spring boot
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.6.RELEASE)
2019-09-07 22:26:37.130 INFO 7772 --- [ main] com.shi.SpringBootRunApplication : Starting SpringBootRunApplication on AndyShi-PC with PID 7772 (D:\maven\workspace\SpringBoot\target\classes started by Andy.Shi in D:\maven\workspace\SpringBoot)
2019-09-07 22:26:37.143 INFO 7772 --- [ main] com.shi.SpringBootRunApplication : No active profile set, falling back to default profiles: default
2019-09-07 22:26:45.312 INFO 7772 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2019-09-07 22:26:45.799 INFO 7772 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-09-07 22:26:45.800 INFO 7772 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.21]
2019-09-07 22:26:46.598 INFO 7772 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-09-07 22:26:46.599 INFO 7772 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 8908 ms
2019-09-07 22:26:48.103 INFO 7772 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2019-09-07 22:26:49.289 INFO 7772 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2019-09-07 22:26:49.294 INFO 7772 --- [ main] com.shi.SpringBootRunApplication : Started SpringBootRunApplication in 15.952 seconds (JVM running for 19.796)
5.浏览器访问
欢迎大家积极留言交流学习心得,点赞的人最美丽,谢谢!