春招及春招后的这一段时间都比较懒,好久没写博客记录了。
这次呢,主要介绍下Spring Boot框架的使用,本来之前用过spring, spring-mvc后繁杂的配置及困难的配置出错排查让我对java web丧失了兴趣,不过后来看了下spring boot又看到了希望,极少的配置能把精力放到业务逻辑实现上。
废话不多说,快来看看吧。
Spring Boot简介及特点
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是
用来简化新Spring应用的初始搭建以及开发过程。
它具有以下特点:
- 为基于Spring的开发提供更快的入门体验
- 开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求。
- 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等。
- Spring Boot并不是不对Spring功能上的增强,而是提供了一种快速使用Spring的方式。
新建项目
开发工具使用IntelliJ IDEA专业版
项目类型选择Spring Initializr,初始服务连接默认就行
填写项目信息,packaging是打包类型,有jar和war两种,可以直接把整个项目打包成一个jar包,直接用jar包部署
这一步可以直接选择各种依赖,这里选一个web构建restful web服务
项目结构
先来看下项目的主要结构,各个文件的作用
程序入口
src/main/java下的程序入口:HelloSpringBootApplication
该类由@SpringBootApplication修饰,功能是@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解结合。
其中@EnableAutoConfiguration作用:Spring Boot会自动根据你jar包的依赖来自动配置项目,因此建议只有一个带有该注解的类。
启动项目
启动Spring Boot项目最简单的方法就是执行下面的方法:
SpringApplication.run(Application.class, args);
该方法返回一个ApplicationContext对象,使用注解的时候返回的具体类型是AnnotationConfigApplicationContext或AnnotationConfigEmbeddedWebApplicationContext,当支持web的时候是第二个。
除了上面这种方法外,还可以用下面的方法:
SpringApplication application = new SpringApplication(Application.class);
application.run(args);
SpringApplication包含了一些其他可以配置的方法,如果你想做一些配置,可以用这种方式。
除了上面这种直接的方法外,还可以使用SpringApplicationBuilder:
new SpringApplicationBuilder()
.showBanner(false)
.sources(Application.class)
.run(args);
当使用SpringMVC的时候由于需要使用子容器,就需要用到SpringApplicationBuilder,该类有一个child(xxx...)方法可以添加子容器。
pom.xml
项目的依赖库及插件等信息
- 父pom
org.springframework.boot
spring-boot-starter-parent
2.0.2.RELEASE
父pom比较简单,而且spring-boot-starter-parent包含了大量配置好的依赖管理,在自己项目添加这些依赖的时候不需要写
- Web模块
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
spring-boot-starter-test:测试模块,包括JUnit、Hamcrest、Mockito
- spring-boot-maven-plugin插件
org.springframework.boot
spring-boot-maven-plugin
该插件支持多种功能,常用的有两种,第一种是打包项目为可执行的jar包。
在项目根目录下执行mvn package将会生成一个可执行的jar包,jar包中包含了所有依赖的jar包,只需要这一个jar包就可以运行程序,使用起来很方便
其他
- src/main/resources下的配置文件:application.properties
以后Spring boot的主要配置就写在这里面 - src/test/下的测试入口:Chapter1ApplicationTests
- resources下:static放静态资源,templates放模板页面
实现RESTful接口
效果
当我们get请求
http://localhost:8080/greeting
返回json格式的回应
{"id":1,"content":"Hello, World!"}
也可以请求时传入name参数
http://localhost:8080/greeting?name=User
返回
{"id":1,"content":"Hello, User!"}
coding
- 首先添加相应的bean
public class Greeting {
private final long id;
private final String content;
public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
public long getId() {
return id;
}
public String getContent() {
return content;
}
}
- 添加Controller
添加相应的Controller相应请求
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}
AtomicLong 是原子类,来产生递增的id值,同时保证并发时数据的准确性。
greeting方法的请求地址映射为http://localhost:8080/greeting,同时用@RequestParam接收请求参数,默认值为World,方法内直接返回一个Greeting对象,它将自动转换为json,因为spring boot已经内置了相关json转化依赖
同时@RestController是@Controller 和 @ResponseBody结合
可以看到实现时我们没写一句配置,解放劳动力啊!
(使用mybatis实现较复杂的RESTful项目,可以看我这个项目,就不写了... https://github.com/biloba123/Reptile)