您的位置:首页 > 编程语言 > Java开发

我的第一个SpringBoot 项目——Hello World

2017-11-09 23:18 525 查看
上一篇简单介绍了如何快速创建一个Spring Boot项目,我们有了一个基本的项目结构:



首先,我们分析pom.xml

<?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>cn.pw</groupId>
<artifactId>pf-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>pf-web</name>
<description>Demo project for Spring Boot</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
<project.build.sourceEncoding
c0e6
>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>


从dependencies中的内容,我们很容易找到了上一篇中,我们提到的两个组件web 和 thymeleaf。从pom文件的依赖配置中,我们发现全都一样,具有相同的结构,都有前缀“spring-boot-starter”。作为SpringBoot 四大神器之一的 starter,主要用于简化依赖,我们再也不用为依赖的版本和maven地址而发愁,springBoot总会为我们匹配它认为最优秀的版本(虽然有时候可能并不是我们想要的),让依赖的版本见鬼去吧,具有选择恐慌症的伙伴们该乐坏了。另外,我们还可以自己定义一个starter, 这部分内容这里暂时不作介绍。

其次,我们将重点放在 WebApplication.java 这个类上:

package cn.pw.pf.web;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class WebApplication {

public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}


只有 简简单单的几行代码,一个几乎被我们忘掉 的main方法,没错就是它,main方法。大道至简,回到了我们刚学习开发语言时的第一个代码——main方法,在这里它依旧是项目启动的入口,执行着最原始的使命。

和老革命的寒暄到此结束,我们进入重点,重点关注一下新同志@SpringBootApplication 这个注解:

查看@SpringBootApplication的源码,我们发现它是由@SpringBootConfiguration 、@EnableAutoConfiguration和@ComponentScan由三个注解组合而成。


①@SpringBootConfiguration : 配置类,相当于 xml

②@EnableAutoConfiguration : 启用spring自动装配

③@ComponentScan : 和xml配置自动扫描效果一样,默认扫描当前包和所有子包(所以,启动类一定要放在最外层的包中)。

接下来,我们写一个Controller,来访问我们的Hello World!

就在cn.pw.pf.web下创建一个controller包,在写一个HelloWorldController类。

package cn.pw.pf.web.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* Hello World Controller
* @Description:
* @Author:libin
* @Date: Created in 2017/11/9
*/
@RestController
@RequestMapping("/")
public class HelloWorldController {

@GetMapping("/hello")
public String helloWorld(){
return "Hello World !";
}
}


OK,我们HelloWorld!写完了,启动项目。直接在idea中运行WebApplication类的main()方法,注意观察控制台。

.   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/  ___)| |_)| | | | | || (_| |  ) ) ) )
'  |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::        (v1.5.8.RELEASE)

2017-11-09 23:35:35.779  INFO 25940 --- [           main] cn.pw.pf.web.WebApplication
...//省略中间部分
2017-11-09 23:36:04.967  INFO 25940 --- [nio-8080-exec-1]
o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 29 ms


(小知识:SpringBoot启动时的banner 是可以 自定义的哦!有兴趣的可以了解一下,换一个自己喜欢的banner)

访问 HelloWorld。在浏览器输入 http://localhost:8080/hello 页面上显示出了我们想要的内容:Hello World !

项目打包运行。

我们使用maven 直接打包,在项目pom所在的目录下,执行 mvn package ,打包 成功后,我们在target目录下能找到 pf-web-0.0.1-SNAPSHOT.jar ,执行 java -jar pf-web-0.0.1-SNAPSHOT.jar。

是不是很简单,不过小朋友就要问了,这是个web项目 ,web容器tomcat呢?

tomcat的问题好解释,springBoot自己集成了tomcat的组件。

SpringBoot项目到底是如何启动的呢?启动流程是什么呢?我们的老朋友main()方法到底做了什么?

解压pf-web-0.0.1-SNAPSHOT.jar,打开META-INF 文件夹,用记事本打开 MANIFEST.MF :

Manifest-Version: 1.0
Implementation-Title: pf-web
Implementation-Version: 0.0.1-SNAPSHOT
Archiver-Version: Plexus Archiver
Built-By: libin
Implementation-Vendor-Id: cn.pw
Spring-Boot-Version: 1.5.8.RELEASE
Implementation-Vendor: Pivotal Software, Inc.
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: cn.pw.pf.web.WebApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.5.0
Build-Jdk: 1.8.0_121
Implementation-URL: http://projects.spring.io/spring-boot/pf-web/[/code] 
我们看到 Main-Class: org.springframework.boot.loader.JarLauncher和

Start-Class: cn.pw.pf.web.WebApplication

看来JarLauncher类才是springBoot启动的入口,然后才运行的Start-Class。更加详细的启动原理和过程,我们在后面的高级篇里探讨。

下一章我们讨论SpringBoot 配置文件 application.yml (application.properties)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: