Java Spring 入门
介绍
Why Spring?
Spring makes programming Java quicker, easier, and safter for everybody. Spring's focus on speed, simplicity, and productivity has made it the world's most popular java framework.
Spring 用于快速有效地构建应用。是一套项目基础模板和工具。
- Spring Boot 是一个快速启动 Spring、打包第三方库、减少配置的基础框架。
Quickstart Guide
创建新的 Spring Boot 项目
使用 Spring Initializr | https://start.spring.io 图形界面设置和创建项目。
添加依赖Spring Web
, 点击Generate
按钮,下载并解压 zip 文件。
添加代码
添加路由/helllo
,处理参数和返回值
src/main/java/com/example/demo/DemoApplication.java
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping("/hello")
public String hello(@RequestParam(value="name", defaultValue="World") String name) {
return String.format("Hello %s", name);
}
}
启动项目
项目下运行命令
./mvnw spring-boot:run
打开网页localhost:8080/hello?name=User
,可以看到相应结果。
Spring Boot Devtools
使用 devtools,当修改文件后重新 compile,自动重启项目
添加有依赖到 pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
运行命令
./mvnw spring-boot:run
修改 src 下的 java 文件
新的终端中运行命令
./mvnw compile
inotifywait
可以检测文件变化实现自动 compile 和 restart
Ubuntu 为例
sudo apt install inotify-tools
dev.sh
#!/bin/bash
monitor() {
inotifywait -m -e create -e modify -e delete -e delete_self -e move $1 |
while read path action file; do
if [[ "$file" =~ .*java$ ]]; then
./mvnw compile
fi
done
}
monitor "./src/main/java/com/example/demo" &
./mvnw spring-boot:run
fswatch
https://github.com/emcrisostomo/fswatch
sudo apt install fswatch
#!/bin/bash
monitor() {
fswatch -0 $1 | while read -d "" event;
do
./mvnw compile
done
}
monitor "./src/main" &
./mvnw spring-boot:run
RESTful Web Service
目标
创建服务,访问http://localhost:8080/greeting
返回 JSON 数据
{"id": 1, "content": "Hello, World!"}
访问http://localhost:8080/greeting?name=User
返回 JSON 数据
{"id": 1, "content": "Hello, User!"}
依赖
- JDK 1.8 or later
- Gradle 4+ or Maven 3.2+
创建新的 Spring Boot 项目
使用 Spring Initializr | https://start.spring.io 图形界面设置和创建项目。
添加依赖Spring Web
, 点击Generate
按钮,下载并解压 zip 文件。
添加代码
添加数据结构模型
src/main/java/com/example/demo/Greeting.java
package com.example.demo;
public class Greeting {
private String name;
public Greeting(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
添加 Controller 来处理请求
src/main/java/com/example/demo/GreetingController.java
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
return new Greeting(name);
}
}
启动项目
项目下运行命令
./mvnw spring-boot:run
打开网页localhost:8080/greeting
,可以看到相应结果。
打包后运行
./mvnw clean package
java -jar target/demo-0.0.1-SNAPSHOT.jar
返回数组例子
package com.example.demo;
import java.util.concurrent.atomic.AtomicLong;
import java.util.List;
import java.util.ArrayList;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@GetMapping("/greetings")
public List<Greeting> greetings(@RequestParam(value="name", defaultValue="World") String name) {
List<Greeting> greetings = new ArrayList<Greeting>();
greetings.add(new Greeting(counter.incrementAndGet(), String.format(template, name)));
greetings.add(new Greeting(counter.incrementAndGet(), String.format(template, name)));
return greetings;
}
}