. ____ _ __ _ _ /// / ___'_ __ _ _(_)_ __ __ _ / / / / ( ( )/___ | '_ | '_| | '_ // _` | / / / / /// ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_/__, | / / / / =========|_|==============|___/=/_/_/_/
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。
个人理解Spring Boot相较于框架的概念来言,它更像一套规范。
她提供了一套规范,按照这个规范开发能够让我们少些好多代码。项目仍然是Spring项目,只是它们正好用到了Spring Boot的起步依赖和自动配置而已。并不用学习新的技术,那些你早已熟悉的从头创建Spring项目的技术或工具,都能用于Spring Boot项目。
Spring推荐使用Maven和Gradle构建项目,这里是以Maven为例
Spring Boot的依赖配置很简单,因为Spring为你提供了起步依赖,需要不同的功能加入不同的起步依赖即可。
Spring Boot起步依赖基本都以spring-boot-starter打头,随后是直接代表其功能的名字,比如web、 test等。比如想要使用freemarker来渲染视图只需要加入spring-boot-starter-freemarker依赖即可
下面是Spring Boot最基本的一个依赖,提供了web开发最简单的脚手架。里面包含了spring-boot-starter、spring-boot-starter-tomcat、spring-boot-web、spring-webmvc等依赖,但是这些细节并不需要关注
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.5.6.RELEASE</version> </dependency>
如果想要更简单可以加上父工程,它统一指定了版本,在依赖中及不需要指定了,会统一使用父工程的版本,使得jar包不会出现冲突
同时父工程也提供了合适的默认设置, 在后面的打包步骤提供了很大的便捷
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.6.RELEASE</version> </parent>
Spring Boot大量使用使用注解,因为使用注解能够极大的简化开发
下面是一个简单的Controller,可以看出和SpringMVC并没有区别,顺便使用了参数绑定
//等价于@Controller,@ResponseBody
@RestController
public class HelloController {
	@RequestMapping("/")
	public String home(HttpServletRequest req) {
		String str = req.getRequestURL().toString();
		str+="/n/nHello World";
		return str;
	}
}
  下面是一个返回视图的Controller,这里使用的渲染引擎是freemarker,只要把模版文件放到指定的目录即可,找到page.ftl文件然后反馈到页面
@Controller
public class PageController {
	
	@RequestMapping("/page")
	public String hello(Model model) {
		model.addAttribute("name", "hello");
		return "page";
	}
}
<html>
<head>
    <title>hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
${name}
</body>
</html>
  下面是一个符合RESTful规范的Controller
@RestController
@RequestMapping("/api/user")
public class UserApi {
	
	@Autowired
	private UserDao userDao;
	
	//GET列出所有
	@GetMapping({"","/"})
	public List<User> listAll() {
		return userDao.findAll();
	}
	
	//GET查询一个
	@GetMapping("/id/{id}")
	public User findById(@PathVariable("id") Integer id) {
		return userDao.findOne(id);
	}
	//PUT添加一个User
	@PutMapping("/{name}/{score}")
	public User add(@PathVariable("name") String name,@PathVariable("score") Integer score) {
		User user = new User();
		user.setName(name);
		user.setScore(score);
		return userDao.save(user);
	}
	
	//POST更新一个User
	@PostMapping("/{id}/{name}/{score}")
	public User update(@PathVariable("id") Integer id,@PathVariable("name") String name,@PathVariable("score") Integer score) {
		User user = new User();
		user.setId(id);
		user.setName(name);
		user.setScore(score);
		return userDao.save(user);
	}
	//DELETE更新一个User
	@DeleteMapping("/id/{id}")
	public void delete(@PathVariable("id") Integer id){
		userDao.delete(id);
	}
}
  综上,你会发现这不就是SpringMVC(Spring Boot 依赖里面包含了springmvc)吗?这是一个挺好的事情,因为并没有改变我们的代码编写习惯。
这这说明Controller并不是springboot的核心
Spring钦定了Thymeleaf
除了Thymeleaf,Spring Boot还支持Freemarker、 Velocity和基于Groovy的模板。无论选择哪种模板,你要做的就是添加合适的起步依赖,在Classpath根部的templates/目录里编写模板。自动配置会处理剩下的事情
比如
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> <version>1.5.6.RELEASE</version> </dependency>
待续…..