本文将从以下几个方面介绍:
前言
HelloWorld
读取配置文件
例子(CURD)
前言
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。(百度百科)
通过 SpringBoot,不再需要写很多的配置文件了, 比如 web.xml , bean.xml 等,它使用“习惯大于配置”的原则;可以简化我们的开发工作,
HelloWorld
下面就来学习一下怎么使用,搭建环境就不写了:
# HelloController
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/hello")
public class HelloController {
@RequestMapping("/")
public String hello(){
return "hello world";
}
}
通过 @RestController 注解来标识它是一个控制层,它是 @Controller 和 @ResponseBody 组合;通过 @RequestMapping 注解来映射请求,之后,启动应用程序,是通过 main 方法来启动的:
#SpringbootApplication
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyspringbootApplication {
public static void main(String[] args) {
SpringApplication.run(MyspringbootApplication.class, args);
}
}
通过 @SpringBootApplication 注解来启动 SpringBoot项目,启动后,在浏览器输入 http://localhost:8080/hello/ 即可:

如果要返回页面也是很方便的,把 @RestController 注解换为 @Controller,之后再返回到对应的页面即可。如下所示:
首先模拟一个服务层提供数据:
# PersonService
import com.google.common.collect.Lists;
import myspringboot.myspringboot.pojo.Person;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class PersonService {
private List<Person> persons = Lists.newArrayList();
public List<Person> queryPersons(){
persons.add(new Person(1, "zhangsan", "java", 24));
persons.add(new Person(2, "lisi", "python", 25));
persons.add(new Person(3, "wangwu", "C++", 22));
persons.add(new Person(4, "zhaoliu", "Redis", 24));
persons.add(new Person(5, "jqjq", "C", 23));
return persons;
}
}
通过 @Component 注解把该 bean 注入到Spring 容器中去,即配置bean,
之后模拟控制层去取数据返回到页面显示:
#Person2Controller
import myspringboot.myspringboot.pojo.Person;
import myspringboot.myspringboot.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@Controller
public class Person2Controller {
@Autowired
private PersonService personService;
@RequestMapping(value = "/queryPersons")
public String queryPersons(ModelMap map){
List<Person> persons = personService.queryPersons();
map.addAttribute("persons", persons);
return "index";
}
}
index.html 代码如下:
<body>
<table>
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
<th>工作</th>
</tr>
</thead>
<tbody>
<tr th:each="person:${persons}">
<td th:text="${person.id}">中</td>
<td th:text="${person.name}">中</td>
<td th:text="${person.age}">中</td>
<td th:text="${person.job}">中</td>
</tr>
</tbody>
</table>
</body>
</html>
之后启动应用程序,浏览器输入:http://localhost:8080/queryPersons 即可看到数据:

读取配置文件
在 SpringBoot 项目中,有一个默认的配置文件 application.properties,如果需要配置相关数据,在该文件中配置即可;如果某个 POJO 对象的值需要配置在配置文件中,则可以通过如下方式来获取:
首先需要定义一个 POJO 对象:
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Getter
@Setter
@ToString
@Component
public class BlogProperties {
@Value("${blog.name}")
private String name;
@Value("${blog.title}")
private String title;
@Value("${blog.desc}")
private String desc;
@Value("${blog.content}")
private String content;
@Value("${blog.author}")
private String author;
@Value("${blog.date}")
private String date;
}
同样, 通过 @Component 注解注入到 Spring 容器中去,之后,可以通过 @Value("${xxx}") 来获取配置文件中对应的值了。在 application.properties,配置文件中添加如下信息:
blog.name=java
blog.title=java core
blog.desc=java python redis
blog.content=java java java java java
blog.author=tsmyk0715
blog.date=2018-9-23
通过单元测试下:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = MyspringbootApplication.class)
public class BlogPropertiesApplicationTests {
@Autowired
private BlogProperties blog;
@Test
public void testBlogProperties(){
System.out.println(blog.getName());
System.out.println(blog.getContent());
System.out.println(blog.getAuthor());
System.out.println(blog);
}
// 结果
java
java java java java java
tsmyk0715
BlogProperties(name=java, title=java core, desc=java python redis, content=java java java java java , author=tsmyk0715, date=2018-9-23)
}
例子(CURD)
接下来看下一个增删改查的例子:
1. 首先定义一个 POJO 对象,共 四个属性:
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Person implements Serializable
{
private int id;
private String name;
private String job;
private int age;
}
之后模拟控制层来接受请求,返回数据:
@RestController
@RequestMapping("/persons")
public class PersonController {
private Map<Integer, Person> persons = Maps.newHashMap();
/**
* 查询所有的用户
* @return
*/
// 处理 /persons/ 的请求, GET 请求表示获取操作
@RequestMapping(value = "/", method = RequestMethod.GET)
public List<Person> getPersons(){
return new ArrayList<>(persons.values());
}
/***
* 添加用户
* @param person
* @return
*/
// 处理 /persons/ 的请求, POST 请求表示添加操作
@RequestMapping(value = "/", method = RequestMethod.POST)
public String addPerson(@ModelAttribute Person person){
persons.put(person.getId(), person);
return "success";
}
/**
* 根据ID查询用户
* @param id
* @return
*/
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public Person getPersonById(@PathVariable int id){
return persons.get(id);
}
/**
* 更新用户信息
* @param id
* @param person
* @return
*/
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public String updatePerson(@PathVariable int id, @ModelAttribute Person person){
Person oldPerson = persons.get(id);
oldPerson.setName(person.getName());
oldPerson.setAge(person.getAge());
oldPerson.setJob(person.getJob());
persons.put(id, oldPerson);
return "success";
}
/**
* 删除用户
* @param id
* @return
*/
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public String deletePerson(@PathVariable int id){
persons.remove(id);
return "success";
}
}
接下来,进行单元测试,使用的使用 Spring 提供的 Mock 工具类进行测试:
import myspringboot.myspringboot.web.PersonController;
import org.hamcrest.Matchers;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mock.web.MockServletContext;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = MockServletContext.class)
@WebAppConfiguration
public class PersonApplicationTests {
private MockMvc mvc;
@Before
public void setup(){
mvc = MockMvcBuilders.standaloneSetup(new PersonController()).build();
}
@Test
public void testPerson() throws Exception{
RequestBuilder request = null;
// 第一次查询,为空
request = MockMvcRequestBuilders.get("/persons/");
mvc.perform(request)
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content()
.string(Matchers.equalTo("[]")));
// post 添加一个用户
request = MockMvcRequestBuilders.post("/persons/")
.param("id", "1")
.param("name", "tsmyk0715")
.param("age", "25")
.param("job", "java");
mvc.perform(request)
.andExpect(MockMvcResultMatchers.content()
.string(Matchers.equalTo("success")));
request = MockMvcRequestBuilders.get("/persons/1");
mvc.perform(request)
.andDo(MockMvcResultHandlers.print());
// 添加另一个用户
request = MockMvcRequestBuilders.post("/persons/")
.param("id", "2")
.param("name", "tsmyk")
.param("age", "26")
.param("job", "python");
mvc.perform(request)
.andExpect(MockMvcResultMatchers.content()
.string(Matchers.equalTo("success")));
// 查询所有用户
request = MockMvcRequestBuilders.get("/persons/");
mvc.perform(request)
.andDo(MockMvcResultHandlers.print());
// 删除用户
request = MockMvcRequestBuilders.delete("/persons/1");
mvc.perform(request)
.andExpect(MockMvcResultMatchers.content()
.string(Matchers.equalTo("success")));
request = MockMvcRequestBuilders.get("/persons/1");
mvc.perform(request)
.andDo(MockMvcResultHandlers.print());
}
}
以上就是 SpringBoot 的一个简单使用。