其实在用了 Python、Ruby 等语言后,再也回不去 Java 的一个很大原因,就是它的配置太多了,在用最受欢迎的 Spring 来做一个简单的 Hello World 输出,也要成吨的配置,这让脱了裤子的我们顿时没了兴致,但是 StringBoot 解决了这个问题。
Spring Boot 是一个轻量级框架,可以完成基于 Spring 的应用程序的大部分配置工作。其实说白了,它封装好了我们默认需要一些配置,我们只需要继承它就可以了。
本章将简单介绍如何使用 StringBoot 运行一个最简单的 Web 项目,来输出 Hello World ,Demo 地址:https://github.com/wxnacy/study/tree/master/java/SpringBoot-HelloWorld
工作环境
- JDK >= 8
- Maven 最新版本(我默认你已经学习了 Maven 的基础知识)
- Git
- 任意开发工具,比如 Vim
创建项目
1 | mvn archetype:generate -DgroupId=com.wxnacy.spring -DartifactId=SpringBoot-HelloWorld -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false |
使用 maven-archetype-quickstart
模板快速创建一个简单的 jar 项目即可,
配置 pom.xml
1 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
它做了这么几件事
- 继承
spring-boot-starter-parent
包完成配置 - 指定
spring-boot-starter-web
包明确该项目为 web 项目 - 使用
spring-boot-maven-plugin
来最终构建项目
Controller
编辑 src/main/java/com/wxnacy/spring/HelloController.java
类1
2
3
4
5
6
7
8
9
10
11
12
13
14package com.wxnacy.spring;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
public class HelloController {
"/") (
public String index() {
return "Hello World";
}
}
@RestController
注解相当于集合了 @Controller
和 @ResponseBody
两个注解的功能,代表该类已经做好了使用 SpringMVC 框架来构建 web 请求的准备。
@RequestMapping
注解将地址 /
映射到 index()
方法上。
创建 Application
src/main/java/com/wxnacy/spring/HelloController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32package com.wxnacy.spring;
import java.util.Arrays;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
return args -> {
System.out.println("Let's inspect the beans provided by Spring Boot:");
String[] beanNames = ctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
for (String beanName : beanNames) {
System.out.println("beanName"+ beanName);
}
};
}
}
@SpringBootApplication
将融合以下几种注解的功能
@Configuration
标记类作为 Application 上下文 bean 的源@EnableAutoConfiguration
告诉Spring Boot开始添加基于classpath设置、其他bean和各种属性的设置。@ComponentScan
告诉 Spring 在当前包中查找其他组件、配置和服务,允许它找到控制器。
最后使用 main()
方法来启动一个 Application,全部配置就完成了。你可能注意到,这个项目没有一个 XML 配置,这就是 SpringBoot 要做的,完全用 Java 的注解来进行配置,它已经用足够好的默认值来配置一个 web 项目,比如以前必备的 DispatcherServlet
还有一个使用 @Bean
注解的 commandLineRunner()
方法,它并不是必备的,但是可以将项目启动所需要的 bean 都打印出来。
运行
1 | $ mvn clean package && java -jar target/SpringBoot-HelloWorld-1.0-SNAPSHOT.jar |
或1
$ mvn spring-boot:run
1 |
|
当看到这样的信息就代表启动成功了,从Let's inspect the beans provided by Spring Boot
开始输出的信息,就是所有加载到的类
查看结果1
$ curl http://localhost:8080
1 | Hello World |