嗯,今日遇贵人。贵人跟我说现在做web的不但要会mysql 啊 SpringMVC啊之类的了,这些都老了。虽不算过时却不是最前沿了。互联网最前沿的必备技术是Spring Boot + MongoDB(非关系型数据库)。于是我就暂且抛下我的雏鹰开发,来了解下这个所谓最前沿是什么。毕竟我是个这么爱学习的孩子是吧~好,开搞!
今日目标:SpringBoot 框架搭建,跑一个HelloWorld出来。
首先了解什么是SpringBoot,他跟Spring、SpringMVC有什么区别和联系呢。在此引用网友大神@Cbdy 的一段话(原文戳这里):
大概说一下:
Spring 是一个“引擎”
Spring MVC 是基于 Spring 的一个 MVC 框架
Spring Boot 是基于 Spring4 的条件注册的一套快速开发整合包Spring 最初利用“工厂模式”( DI )和“代理模式”( AOP )解耦应用组件。大家觉得挺好用,于是按照这种模式搞了一个 MVC 框架(一些用 Spring 解耦的组件),用开发 web 应用( SpringMVC )。然后有发现每次开发都要搞很多依赖,写很多样板代码很麻烦,于是搞了一些懒人整合包( starter ),这套就是 Spring Boot
说白了呢,就是方便码农、程序猿快速开发web应用的这么一个框架,具体怎么加速的,这里引用网友大神@import_java_any的话(原文戳这里):
先从Spring讲起。很多做过Java项目的人估计都知道,项目中存在着很多很复杂的依赖关系,如果对这些依赖关系不加以管理的话,随着Bug的修复,新需求的加入,以及项目的发展,项目会变得越来越维护,尤其是有新同事来负责维护项目的话,新同事很难快速的理解项目的结构以及其中的依赖关系。于是Spring便应运而生,Spring框架可以理解为是一套良好的代码框架与设计模式的集合,通过使用Spring框架,项目内部的依赖关系可以与项目代码解耦,并保存在配置文件(组)中,这使得代码变得简单明了,依赖关系也变得简单明了并易于配置,从而大大降低了项目的维护难度。
那么Spring Boot又是做什么的呢?Spring框架固然有其好处,但是随着项目规模的扩大,配置文件(组)会变得相当庞大,项目中新增或者修改一个功能时,几乎都要从这么庞大的配置文件(组)中去建立或修改相应的配置,这其中的工作量是可想而知的,并且,配置文件(组)的维护此时也变得复杂了。于是Spring Boot便应运而生了。Spring Boot可以看作是利用了与程序员之间的一些“约定”,即当程序员遵循这些约定的时候,Spring Boot便会给出基于这些“约定”的默认的配置,从而减少了程序员在维护配置文件(组)上的工作量。这也是最近很流行的“约定优于配置”(Convention Over Configuration) 思想的体现。
也就是说,SpringBoot简化了很多程序员繁琐的配置工作,大大提高了开发效率。如此看来,这个SpringBoot还真的是不错。那话不多说,赶紧搞一下看看有多快。
开发环境:win10+IntelliJ IDEA
步骤一:使用SPRING INITIALIZR创建项目,截图如下:
过程中,勾选web,截图如下:
完成后,项目结构截图如下:
看到了有个java类,我就点进去看了一下,发现竟然有main函数:
package com.simon;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
哇塞,好神奇,难道可以直接运行吗。我就手贱的run了以下,结果发现,还真的可以跑,日志截图如下,还蛮好玩的:
发现了没有,最上面的是一个Spring,有意思的码农~而且我还发现了一些不正常的地方,图中标注出来了,这是什么,tomcat初始化?还有拦截器?难道,我可以直接通过网页访问了吗?然后我就去尝试了一下,发现竟然真的真的跑起来了,不过没有结果罢了:
于是我就准备给他加点东西。
步骤二:
新建类:HelloWorldController.java:
package com.simon.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @Author Simon
* @Date 2017/5/8 23:54
*/
@Controller
@RequestMapping(value = "hello")
public class HelloWorldController {
@RequestMapping(value = "world")
@ResponseBody
public String hello(){
return "Hello World";
}
}
此时重新运行项目,结果得出:
此时发现,我写的代码跟我所参考的教程代码不太一致,教程代码是:
@RestController
public class HelloController {
@RequestMapping("/hello")
public String index(){
return "Hello World";
}
}
由于习惯,我直接用了@Controller+@ResponseBody,这个@RestController引起了我的注意,原来没注意过,而运行结果是一致的,百度了一下,官方文档如下(原文戳这里):
@RestController is a stereotype annotation that combines @ResponseBody and @Controller.
意思就是@RestController相当于@ResponseBody + @Controller合在一起。不过单纯的@RestController注解的话,Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。所以还是@Controller好用。
问题:为何直接跑Java main 函数,就可以直接运行项目
解答:因为Spring Boot 中自带Tomcat,所以不需要额外配置Tomcat,直接跑main函数相当于启动Tomcat进程,为发布提供很大便利。
总结:今日随手写了个小demo,却比之前搭建SpringMVC时耗时减少了不少,不说配置Tomcat的时间,单单配置Spring的参数就占用了搭建框架大部分的时间,而SpringBoot都给你自动配置好,这点大大提高了开发效率,实现了敏捷开发。很棒。
明日目标:加入MongoDB支持。写一个简单的查询。