目录:
前言:
目前打算写一系列关于SpringBoot的教程,观望网上大多数视频以及教程都是单纯教大家如何写一个SpringBoot程序(比如最简单的Hello World程序)出来,而没有介绍到SpringBoot一些注解的作用以及原理到底是怎样的,所以决定结合官方文档以及《Spring Boot 实战》这本书写一系列教程帮大家入门SpringBoot。笔主使用的 开发工具是idea,推荐大家使用idea,当然你也可以使用Eclipse等开发工具。下面讲述的时候,我都以idea为视角讲解程序编写过程。
概要
本节将先从Spring谈起再到SpringBoot,然后通过一个实际的例子带大家感受Spring Boot的强大。
一 SpringBoot介绍
1.1 先从Spring谈起
我们知道Spring是重量级企业开发框架 Enterprise JavaBean(EJB) 的替代平,Spring为企业级Java开发提供了一种相对简单的方法,通过 依赖注入 和 面向切面编程 ,用简单的 Java对象(Plain Old Java Object,POJO) 实现了EJB的功能
虽然Spring的组件代码是轻量级的,但它的配置却是重量级的(需要大量XML配置) 。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。
尽管如此,我们依旧没能逃脱配置的魔爪。开启某些Spring特性时,比如事务管理和Spring MVC,还是需要用XML或Java进行显式配置。启用第三方库时也需要显式配置,比如基于Thymeleaf的Web视图。配置Servlet和过滤器(比如Spring的DispatcherServlet)同样需要在web.xml或Servlet初始化代码里进行显式配置。组件扫描减少了配置量,Java配置让它看上去简洁不少,但Spring还是需要不少配置。
光配置这些XML文件都够我们头疼的了,占用了我们大部分时间和精力。除此之外,相关库的依赖非常让人头疼,不同库之间的版本冲突也非常常见。
不过,好消息是:Spring Boot让这一切成为了过去。
1.2 再来谈谈Spring Boot
最好直白的介绍莫过于官方的介绍:
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”…Most Spring Boot applications need very little Spring configuration.(Spring Boot可以轻松创建独立的生产级基于Spring的应用程序,只要通过 “just run”(可能是run ‘Application’或java -jar 或 tomcat 或 maven插件run 或 shell脚本)便可以运行项目。大部分Spring Boot项目只需要少量的配置即可)
关于Spring Boot的一些误解:
- Spring Boot不是应用服务器: Spring Boot可以把Web应用程序变为可自执行的JAR文件,不用部署到传统Java应用服务器里就能在命令行里运行。Spring Boot在应用程序里嵌入了一个Servlet容器(Tomcat、Jetty或Undertow),以此实现这一功能。但这是内嵌的Servlet容器提供的功能,不是Spring Boot实现的
- Spring Boot也没有实现诸如JPA或JMS(Java Message Service,Java消息服务)之类的企业级Java规范。 它的确支持不少企业级Java规范,但是要在Spring里自动配置支持那些特性的Bean。例如,Spring Boot没有实现JPA,不过它自动配置了某个JPA实现(比如Hibernate)的Bean,以此支持JPA
- Spring Boot没有引入任何形式的代码生成,而是利用了Spring 4的条件化配置特性,以及Maven和Gradle提供的传递依赖解析,以此实现Spring应用程序上下文里的自动配置。
简而言之,从本质上来说,Spring Boot就是Spring,它做了那些没有它你自己也会去做的Spring Bean配置。
SpringBoot的特点:
- 创建独立的Spring应用程序
- 直接嵌入Tomcat,Jetty或Undertow(无需部署WAR文件)
- 简化的Maven配置
- 尽可能自动配置Spring
- 提供生产就绪功能,如指标,运行状况检查和外部配置
- 绝对不会生成代码,并且不需要XML配置
二 第一个HelloWorld项目
2.1 项目创建
1.打开IDEA,创建新项目,选择Spring Initializr
2.自己命名groupId以及artifactId
3.勾选web选项:
4. 点击finish即可完成创建
创建好的项目结构:
另外,spingboot建议的目录结果如下:
root package结构:com.example.myproject
com
+- example
+- myproject
+- Application.java
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- controller
| +- CustomerController.java
|
1、Application.java 建议放到跟目录下面,主要用于做一些框架配置
2、domain目录主要用于实体(Entity)与数据访问层(Repository)
3、service 层主要是业务类代码
4、controller 负责页面访问控制
采用默认配置可以省去很多配置,当然也可以根据自己的喜好来进行更改。
如果你没有idea的话,你也可以通过https://start.spring.io/ 这个网站来创建。
2.2 添加相关Maven依赖(利用上面的步骤创建完成后自动生成)
<?xml version="1.0" encoding="UTF-8"?>
<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>
<groupId>org.springframework</groupId>
<artifactId>gs-spring-boot</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
使用上面的方式创建Spring Boot项目之后pom.xml文件中默认有两个模块:
spring-boot-starter:核心模块,包括自动配置支持、日志和YAML;
spring-boot-starter-test:测试模块,包括JUnit、Hamcrest、Mockito。
2.3 相关代码编写
项目结构:
└── src
└── main
└── java
└── FirstSpringBootApp
src/main/java/FirstSpringBootApp/HelloWorld .java
package FirstSpringBootApp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@Controller
@EnableAutoConfiguration
public class HelloWorld {
@RequestMapping("/")
@ResponseBody
String home() {
return "Hello World!";
}
@RequestMapping("/hello")
@ResponseBody
String home1() {
return "Hello World! Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(HelloWorld.class, args);
}
}
2.4 补充:
我们可以把 @Controller 注解更换成 @RestController ,这样在每一个方法上面就不需要再加 @ResponseBody 注解了。
src/main/java/FirstSpringBootApp/HelloWorld2 .java
package FirstSpringBootApp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@EnableAutoConfiguration
public class HelloWorld2 {
@RequestMapping("/")
String home() {
return "Hello World!";
}
@RequestMapping("/hello")
String home1() {
return "Hello World! Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(HelloWorld.class, args);
}
}
上述代码和前面编写的代码运行后具有同样的效果。
@RestController:
一种方便的注释,集成了@Controller和@ResponseBody注解。也就是说加上RestController 表示修饰该Controller所有的方法返回JSON格式,直接可以编写
Restful接口。
@EnableAutoConfiguration
作用在于让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置
这个注解告诉Spring Boot根据添加的jar依赖猜测你想如何配置Spring。由于spring-boot-starter-web添加了Tomcat和Spring MVC,所以auto-configuration将假定你正在开发一个web应用并相应地对Spring进行设置。
SpringApplication.run(HelloController.class, args)
标识为启动类
2.5 运行测试
右键类名后点击Run即可。
`
访问 http://localhost:8080/