zoukankan      html  css  js  c++  java
  • Spring Boot——2分钟构建spring web mvc REST风格HelloWorld

    之前有一篇《5分钟构建spring web mvc REST风格HelloWorld》介绍了普通方式开发spring web mvc web service。接下来看看使用spring boot如何快速构建一个。

    Spring Boot使我们更容易去创建基于Spring的独立和产品级的可以”即时运行“的应用和服务。支持约定大于配置,目的是尽可能快地构建和运行Spring应用。

    之前我们创建基于Spring的项目需要考虑添加哪些Spring依赖和第三方的依赖。使用Spring Boot后,我们可以以最小化的依赖开始spring应用。大多数Spring Boot应用需要很少的配置即可运行,比如我们可以创建独立独立大Java应用,然后通过java -jar运行启动或者传统的WAR部署。其也提供了命令行工具来直接运行Spring脚本(如groovy脚本)。也就是说Spring Boot让Spring应用从配置到运行变的更加简单,但不对Spring本身提供增强(即额外的功能)。

    目的:

    让所有Spring开发变得更快,且让更多的人更快的进行Spring入门体验,提供“starter” POM来简化我们的Maven配置(也就是说使用Spring Boot只有配合maven/gradle等这种依赖管理工具才能发挥它的能力),不像以前,构建一个springmvc项目需要进行好多配置等

    开箱即用,快速开始需求开发而不被其他方面影响(如果可能会自动配置Spring)

    提供一些非功能性的常见的大型项目类特性(如内嵌服务器、安全、度量、健康检查、外部化配置),如可以直接地内嵌Tomcat/Jetty(不需要单独去部署war包)

    绝无代码生成,且无需XML配置

    我的构建环境

    JDK 7

    Maven 3

    Servlet3容器 

    创建项目

    首先使用Maven创建一个普通Maven应用即可,不必是web的。

    添加Spring Boot相关POM配置

    在pom.xml中添加如下配置

    Java代码  收藏代码
    1. <!-- Inherit defaults from Spring Boot -->  
    2. <parent>  
    3.     <groupId>org.springframework.boot</groupId>  
    4.     <artifactId>spring-boot-starter-parent</artifactId>  
    5.     <version>0.5.0.BUILD-SNAPSHOT</version>  
    6. </parent>  
    7.   
    8. <!-- Add typical dependencies for a web application -->  
    9. <dependencies>  
    10.     <dependency>  
    11.         <groupId>org.springframework.boot</groupId>  
    12.         <artifactId>spring-boot-starter-web</artifactId>  
    13.     </dependency>  
    14. </dependencies>  
    15.   
    16. <!-- Package as an executable JAR -->  
    17. <build>  
    18.     <plugins>  
    19.         <plugin>  
    20.             <groupId>org.springframework.boot</groupId>  
    21.             <artifactId>spring-boot-maven-plugin</artifactId>  
    22.         </plugin>  
    23.     </plugins>  
    24. </build>  
    25.   
    26. <!-- Allow access to Spring milestones and snapshots -->  
    27. <!-- (you don't need this if you are using anything after 0.5.0.RELEASE) -->  
    28. <repositories>  
    29.     <repository>  
    30.         <id>spring-snapshots</id>  
    31.         <url>http://repo.spring.io/snapshot</url>  
    32.         <snapshots><enabled>true</enabled></snapshots>  
    33.     </repository>  
    34.     <repository>  
    35.         <id>spring-milestones</id>  
    36.         <url>http://repo.spring.io/milestone</url>  
    37.         <snapshots><enabled>true</enabled></snapshots>  
    38.     </repository>  
    39. </repositories>  
    40. <pluginRepositories>  
    41.     <pluginRepository>  
    42.         <id>spring-snapshots</id>  
    43.         <url>http://repo.spring.io/snapshot</url>  
    44.     </pluginRepository>  
    45.     <pluginRepository>  
    46.         <id>spring-milestones</id>  
    47.         <url>http://repo.spring.io/milestone</url>  
    48.     </pluginRepository>  
    49. </pluginRepositories>  

    继承spring-boot-starter-parent后我们可以继承一些默认的依赖,这样就无需添加一堆相应的依赖,把依赖配置最小化;spring-boot-starter-web提供了对web的支持,spring-boot-maven-plugin提供了直接运行项目的插件,我们可以直接mvn spring-boot:run运行。

    实体

    Java代码  收藏代码
    1. package com.sishuok.entity;  
    2.   
    3. /** 
    4.  * <p>User: Zhang Kaitao 
    5.  * <p>Date: 13-12-22 
    6.  * <p>Version: 1.0 
    7.  */  
    8. public class User {  
    9.     private Long id;  
    10.     private String name;  
    11.   
    12.     public Long getId() {  
    13.         return id;  
    14.     }  
    15.   
    16.     public void setId(Long id) {  
    17.         this.id = id;  
    18.     }  
    19.   
    20.     public String getName() {  
    21.         return name;  
    22.     }  
    23.   
    24.     public void setName(String name) {  
    25.         this.name = name;  
    26.     }  
    27.   
    28.     @Override  
    29.     public boolean equals(Object o) {  
    30.         if (this == o) return true;  
    31.         if (o == null || getClass() != o.getClass()) return false;  
    32.   
    33.         User user = (User) o;  
    34.   
    35.         if (id != null ? !id.equals(user.id) : user.id != null) return false;  
    36.   
    37.         return true;  
    38.     }  
    39.   
    40.     @Override  
    41.     public int hashCode() {  
    42.         return id != null ? id.hashCode() : 0;  
    43.     }  
    44. }  

    控制器

    Java代码  收藏代码
    1. package com.sishuok.controller;  
    2.   
    3. import com.sishuok.entity.User;  
    4. import org.springframework.boot.SpringApplication;  
    5. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;  
    6. import org.springframework.web.bind.annotation.PathVariable;  
    7. import org.springframework.web.bind.annotation.RequestMapping;  
    8. import org.springframework.web.bind.annotation.RestController;  
    9.   
    10. /** 
    11.  * <p>User: Zhang Kaitao 
    12.  * <p>Date: 13-12-22 
    13.  * <p>Version: 1.0 
    14.  */  
    15. //@EnableAutoConfiguration  
    16. @RestController  
    17. @RequestMapping("/user")  
    18. public class UserController {  
    19.   
    20.     @RequestMapping("/{id}")  
    21.     public User view(@PathVariable("id") Long id) {  
    22.         User user = new User();  
    23.         user.setId(id);  
    24.         user.setName("zhang");  
    25.         return user;  
    26.     }  
    27.   
    28.     //public static void main(String[] args) {  
    29.     //    SpringApplication.run(UserController.class);  
    30.     //}  
    31.   
    32. }  

    运行  

    第一种方式

    通过在UserController中加上@EnableAutoConfiguration开启自动配置,然后通过SpringApplication.run(UserController.class);运行这个控制器;这种方式只运行一个控制器比较方便;

    第二种方式

    通过@Configuration+@ComponentScan开启注解扫描并自动注册相应的注解Bean

    Java代码  收藏代码
    1. package com.sishuok;  
    2.   
    3. import com.sishuok.controller.UserController;  
    4. import org.springframework.boot.SpringApplication;  
    5. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;  
    6. import org.springframework.context.annotation.ComponentScan;  
    7. import org.springframework.context.annotation.Configuration;  
    8.   
    9. /** 
    10.  * <p>User: Zhang Kaitao 
    11.  * <p>Date: 13-12-22 
    12.  * <p>Version: 1.0 
    13.  */  
    14. @Configuration  
    15. @ComponentScan  
    16. @EnableAutoConfiguration  
    17. public class Application {  
    18.     public static void main(String[] args) {  
    19.         SpringApplication.run(Application.class);  
    20.     }  
    21. }  

    到此,一个基本的REST风格的web应用就构建完成了。

    地址栏输入http://localhost:8080/user/1即可看到json结果。

    如果大家查看其依赖,会发现自动添加了需要相应的依赖(不管你用/不用),但是开发一个应用确实变得非常快速,对于想学习/体验Spring的新手,快速建立项目模型等可以考虑用这种方式。当然如果不想依赖这么多的jar包,可以去掉parent,然后自己添加依赖。 

    欢迎加入spring群134755960进行交流。

    参考

    https://github.com/spring-projects/spring-boot

  • 相关阅读:
    智能汽车无人驾驶资料调研(一)
    Python 学习
    关于中英文排版的学习
    UI Testing
    项目管理:第一次参与项目管理
    自动化测试用什么语言好
    什么是自动化测试
    睡眠的重要性
    python的pip和cmd常用命令
    矩阵的切片计算(截取)
  • 原文地址:https://www.cnblogs.com/DjangoBlog/p/5788384.html
Copyright © 2011-2022 走看看