301
Q: #21.1-1 | 在Spring家族中,Spring Boot是令人兴奋(也许我敢说它是改变游戏规则的)的新项目。它提供了四个主要的特性,能够改变开发Spring应用程序的方式
A:
302
Q: #21.1.1-1 | Spring Boot Starter依赖将所需的常见依赖按组聚集在一起,形成单条依赖
A:
303
Q: #21.1.4-1 | Spring Boot Actuator为Spring Boot项目带来了很多有用的特性,包括
A:
304
Q: #21.2-1 | Contacts应用所需的Gradle构建文件
A:
build script{
repositories {
mavenLocal();
}
dependencies{
classpath(“org.springframework.boot:spring-boot-gradle-plugin:1.1.4.RELEASE")
}
}
apply plugin: ‘java’
apply plugin: ’spring-boot’//使用Spring Boot插件
jar {//构建JAR文件
baseName = ‘contacts’
version = ‘0.1.0'
}
repositories{
mavenCentral()
}
dependencies{//依赖将会放到这里
}
task wrapper(type: Wrapper){
gradleVersion=‘1.8'
}
305
Q: #21.2-2 | Contacts应用所需的Maven构建文件
A:
<?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>com.hahuma</grooupId>
<artifactId>contacts</artifactId>
<version>0.1.0</version>
<packaging>jar</packaging> //构建jar文件
<parent>
<groupId>org.springframework.boot</group> //继承自spring-boot-starter-parent
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.4</version>
</parent>
<dependencies>
//依赖将会放到这里
</dependencies>
<build>
<plugins> //构建jar文件
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugins>
</build>
</project>
306
Q: #21.2.1-1 | 因为我们要使用Spring MVC来开发应用的Web层,因此需要将Spring MVC作为依赖添加到构建中。Spring Boot的Web Starter能够将Spring MVC需要的所有内容一站式添加到构建中。如下是我们所需的依赖:
A:
##Gradle依赖
compile("org.springframework.boot:spring-boot-starter-web")
##Maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
307
Q: #21.2.2-2 | ContactController为Contacts应用处理基本的Web请求
A:
package contacts;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotypr.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping(“/“)
public class ContactController{
private ContactRepository contactRepo;
@Autowired
public ContactController(ContactRepository contactRepo){//注入ContactRepository
this.contactRepo = contactRepo;
}
@RequestMapping(method=RequestMethod.GET)//处理GET“/”
public String home(Map<String, Object> model){
List<Contact> contacts = contactRepo.findAll();
model.put(“contacts”,contacts);
return “home”;
}
@RequestMapping(method=RequestMethod.POST)//处理POST“/”
public String submit(Contact contact){
contactRepo.save(contact);
return “redirect:/“;
}
}
308
Q: #21.2.2-1 | home视图渲染了一个创建新联系人的表单以及展现联系人的列表
A:
<!DOCTYPE html>
<html xmlns:th=“http://www.thymeleaf.org”>
<head>
<title>Spring Boot Contacts</title>
<link rel=“stylesheet” th:href=“@(/style.css)” />//加载样式表
</head>
<body>
<h2>Spring Boot Contacts</h2>
<form method=“POST”>//新联系人的表单
<label for=“firstName”>First Name:/</label>
<input type=“text” name=“firstName”></input><br/>
<label for=“lastName”>Last Name:/</label>
<input type=“text” name=“lastName”></input><br/>
<label for=“phoneNumber”>Phone #:/</label>
<input type=“text” name=“phoneNumber”></input><br/>
<label for=“emailAddress”>Email::/</label>
<input type=“text” name=“emailAddress”></input><br/>
<input type=“submit”></input>
</form>
<ul th:each=“contact:$(contacts)”>//渲染联系人表单
<li>
<span th:text=“$(contact.firstName)”>First</span>
<span th:text=“$(contact.lastName)”>Last</span>
<span th:text=“$(contact.phoneNumber)”>phoneNumber</span>
<span th:text=“$(contact.emailAddress)”>emailAddress</span>
</li>
</ul>
</body>
</html>
309
Q: #21.2.4-1 | ContactRepository能够从数据库中存取Contact
A:
package contacts;
import java.util.List;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
@Repository
public class ContactRepository{
private JdbcTemplate jdbc;
@Autowired
public ContactRepository(JdbcTemplate jdbc){
this.jdbc=jdbc;
}
public List<Contact> findAll(){
retrun jdbc.query(
“select id, firstName, lastName, phoneNumber, emailAddress “ +
“from contacts order by lastName”,
new RowMapper<Contact>(){
public Contact mapRow(ResultSet rs, int rowNum)throws SQLException {
Contact contact = new Contact();
contact.setId(rs.getLong(1));
contact.setFirstName(rs.getLong(2));
contact.setLastName(rs.getLong(3));
contact.setPhoneNumber(rs.getLong(4));
contact.setEmailAddress(rs.getLong(5));
return contact;
}
}
);
}
public void save(Contact contact){
jdbc.update(
“insert into contacts “ +
“(firstName, lastName, phoneNumber, emailAddress) “ +
“values (?, ?, ?, ?)”,
contact.getFirstName(), contact.getLastName(),
contact.getPhoneNumber(), contact.getEmailAddress());
}
}
310
Q: #21.2.5-1 | 初始化Spring Boot配置的简单启动类
A:
package contacts;
import org.springframework.boot.autoconfigure.EnableAutoConfigureation;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan
@EnableAutoConfiguration//启用自动配置
public class Application{
public static void main(String[] args){
SpringApplication.run(Application.class, args);//运行应用
}
}