記錄我的第一個Spring Boot
阿新 • • 發佈:2018-12-04
Spring Boot的guides有推薦的建立spring專案的外掛,但是我現在不打算用
使用工具
- myeclipse
- myeclpse自帶maven(3.3.3)
成功頁面:
建立過程:
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>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.5.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>
在src/main/java/hello下新建HelloController.java
package hello; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestMapping; @RestController public class HelloController { @RequestMapping("/") public String index() { return "Greetings from Spring Boot!我的第一個Spring Boot."; } }
該類被標記為 @RestController
,這意味著Spring MVC可以使用它來處理Web請求。@RequestMapping
對映/
到index()
方法。從瀏覽器呼叫或在命令列上使用curl時,該方法返回純文字。這是因為@RestController
組合@Controller
和@ResponseBody
兩個註釋會導致Web請求返回資料而不是檢視。
在src/main/java/hello下新建Application.java
package hello; 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; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean 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); } }; } }
@SpringBootApplication
是一個便利註釋,添加了以下所有內容:
@Configuration
標記該類作為應用程式上下文的bean定義的源。@EnableAutoConfiguration
告訴Spring Boot開始根據類路徑設定,其他bean和各種屬性設定新增bean。通常你會新增
@EnableWebMvc
一個Spring MVC應用程式,但Spring Boot會在類路徑上看到spring-webmvc時自動新增它。這會將應用程式標記為Web應用程式並激活關鍵行為,例如設定DispatcherServlet
。@ComponentScan
告訴Spring在包中尋找其他元件,配置和服務hello,允許它找到控制器。
該main()
方法使用Spring Boot的SpringApplication.run()
方法來啟動應用程式。您是否注意到沒有一行XML?也沒有web.xml檔案。此Web應用程式是100%純Java,您無需處理配置任何管道或基礎結構。
還有一個CommandLineRunner
標記為@Bean
的方法,它在啟動時執行。它檢索由您的應用程式建立或由於Spring Boot自動新增的所有bean。它對它們進行分類並打印出來。
新增單元測試
- 在pom.xml中新增
<!-- 新增單元註釋 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
- 在src/test/java/hello下新增HelloControllerTest.java
package hello;
import static org.hamcrest.Matchers.equalTo;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void getHello() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("Greetings from Spring Boot!我的第一個Spring Boot.")));
}
}
Run As Junit Test 無報錯即成功。
END