轉(zhuǎn)載請(qǐng)注明來(lái)源 賴賴的博客
導(dǎo)語(yǔ)
了解配置原理才能善用配置,才能對(duì)產(chǎn)品和技術(shù)更有信心
這篇文章將帶你進(jìn)入Spring Boot的世界源织,并簡(jiǎn)單介紹Spring Boot的AutoConfig的使用
實(shí)例
項(xiàng)目工程目錄結(jié)構(gòu)和代碼獲取地址
獲取地址(TAG將會(huì)注明不同版本對(duì)應(yīng)的課程)
https://github.com/laiyijie/Spring-Boot-Learning
目錄結(jié)構(gòu)
如圖所示,是一個(gè)標(biāo)準(zhǔn)的Maven工程,只有兩個(gè)核心的文件衣盾,pom.xml 和 LearningApplication.java
其余的為IDEA寺旺、git所要用到的文件或者M(jìn)aven編譯出來(lái)的文件(可以忽略)
運(yùn)行方式
- 右鍵 LearningApplication并運(yùn)行(跟運(yùn)行一個(gè)最普通的辦好 Main函數(shù)的Java類一樣)
運(yùn)行結(jié)果
控制臺(tái):
打開(kāi)瀏覽器輸入: http://localhost:8080/
其實(shí)是一個(gè)簡(jiǎn)單的Web服務(wù)
項(xiàng)目詳解
下面我們來(lái)看一下這個(gè)項(xiàng)目到底是怎么樣的
項(xiàng)目就一個(gè)代碼文件以及一個(gè)pom文件
我們不妨從LearningApplication.java 入手看
LearningApplication.java
package me.laiyijie.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class LearningApplication{
@RequestMapping("/")
public String tee(){
return "hello spring boot";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(LearningApplication.class, args);
}
}
忽略注解,由于我們是直接運(yùn)行這個(gè)類的势决,我們不妨從這個(gè)類的Main函數(shù)入手阻塑!
Main函數(shù)
public static void main(String[] args) throws Exception {
SpringApplication.run(LearningApplication.class, args);
}
Main函數(shù)只有一行代碼!
SpringApplication.run(LearningApplication.class, args);
就是調(diào)用了一個(gè)叫做SpringApplication.run的方法果复,并且把當(dāng)前類傳了進(jìn)去陈莽!
在我們之前學(xué)過(guò)的Spring MVC的相關(guān)知識(shí),我們知道虽抄,一個(gè)Web應(yīng)用是需要依托一個(gè)Web容器的(例如tomcat)走搁,而且需要在web.xml中配置Spring的DispatcherServlet以及其WebApplicationContext,例如:
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
這是一個(gè)Spring MVC的 web.xml的標(biāo)準(zhǔn)配置迈窟。
也就是說(shuō)私植,SpringApplication.run 這個(gè)方法,幫我們完成了這些動(dòng)作车酣!
- 啟動(dòng)了一個(gè)tomcat
- 配置了項(xiàng)目相應(yīng)的 web.xml并放入tomcat當(dāng)中運(yùn)行
通過(guò)日志我們也可以看到
Tomcat initialized with port(s): 8080 (http)
Starting service [Tomcat]
Starting Servlet Engine: Apache Tomcat/8.5.15
Initializing Spring embedded WebApplicationContext
Root WebApplicationContext: initialization completed in 1357 ms
也就是上面我們說(shuō)的那些事曲稼,確實(shí)是通過(guò)這一行代碼完成了!
那是如何完成的呢湖员?
這就要看LearningApplication前面的幾個(gè)注解了
類注解 @SpringBootApplication
這個(gè)注解其實(shí)是由三個(gè)注解組合而成的
- @Configuration
- @ComponentScan
- @EnableAutoConfiguration
這樣分解后贫悄,就簡(jiǎn)單很多了!
@Configuration 是Spring采用JavaConfig方式的一個(gè)注解娘摔,在當(dāng)前示例中窄坦,并沒(méi)用,你可以去掉這個(gè)注解再次運(yùn)行凳寺,例子嫡丙,發(fā)現(xiàn)結(jié)果一致
@ComponentScan 其實(shí)就是打開(kāi)了注解配置Spring的方式,也就是相當(dāng)于xml文件中的
<context:annotation-config/>
而@EnableAutoConfiguration 就是我們說(shuō)的Spring Boot的核心之一读第,開(kāi)啟自動(dòng)配置的注解
那么這個(gè)注解有什么用呢曙博?
在當(dāng)前的工程中,就是完成了我們之前說(shuō)的兩件事情
- 啟動(dòng)了一個(gè)tomcat
- 配置了項(xiàng)目相應(yīng)的 web.xml并放入tomcat當(dāng)中運(yùn)行
其實(shí)@EnableAutoConfiguration不僅僅如當(dāng)前工程這么簡(jiǎn)單怜瞒,它是靈活的父泳、自適應(yīng)的,我們將在下個(gè)章節(jié)具體講述他的作用吴汪。
接下來(lái)我們看下pom.xml文件:
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>me.laiyijie</groupId>
<artifactId>spring-boot-learning</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
核心區(qū)域有兩個(gè)地方
parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>
這里繼承了 spring-boot-starter-parent
dependency
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
這里使用了spring-boot-starter-web
在入門篇不贅述惠窄,我們將在后續(xù)章節(jié)詳細(xì)解釋這些pom文件的區(qū)別、關(guān)系和使用方式