Skip to content

毛俊的博客

快速入门SpringBoot

springboot1 min read

SpringBoot是spring的脚手架,可以简化spring开发,无需编写xml文件。

SpringBoot的特性有

  • 内嵌应用服务器
  • 简化构建配置
  • 自动配置spring和第三方库。
  • 提供安全指标、运行状况监测和外部化配置等企业级功能。
  • 不需要XML配置。

搭建SpringBoot项目有多种方式:

  • Maven构建
  • Gradle构建
  • start.spring.io构建

maven构建SpringBoot

使用Maven构建一个普通的SpingBoot项目,添加如下的maven依赖:

1<parent>
2 <groupId>org.springframework.boot</groupId>
3 <artifactId>spring-boot-starter-parent</artifactId>
4 <version>2.0.6.RELEASE</version>
5 </parent>
6
7 <dependencies>
8 <dependency>
9 <groupId>org.springframework.boot</groupId>
10 <artifactId>spring-boot-starter-web</artifactId>
11 </dependency>
12 </dependencies>

编写如下的java代码:

1@RestController
2@EnableAutoConfiguration
3public class HelloWorld {
4
5 @GetMapping("hello")
6 public String helloWorld() {
7 return "hello world";
8 }
9
10 public static void main(String[] args) {
11 SpringApplication.run(HelloWorld.class, args);
12 }
13
14}

运行main方法,打开地址http://127.0.0.1:8080,使用路径/hello访问,浏览器返回hello world内容即Mavne构建SpringBoot项目成功。

优化Maven项目

上面的代码存在一个问题,如果有多个controller就需要创建多个启动器才行,但是多个启动器是不能共用一个8080端口的。为了解决这个问题,可以将上面的启动器代码提取出来,成我一个公共的全局启动器。

新建一个同包名统计的SpringBootMain.增加全局引导代码:

1@EnableAutoConfiguration
2public class SpringBootMain {
3
4 public static void main(String[] args) {
5 SpringApplication.run(SpringBootMain.class, args);
6 }
7}

同时精简掉原先的HelloWorld类:

1@RestController
2public class HelloWorld {
3
4 @GetMapping("hello")
5 public String helloWorld() {
6 return "hello world";
7 }
8}

再次启动并访问http://127.0.0.1:8080/hello,结果并没有返回我们需要的内容。而是返回了错误页面Whitelabel Error Page。注意当使用spring构建项目时是用xml配置注解扫描<context:component-scan />来扫描类包下注解。SpringBoot简化了配置文件,当时需要使用注解扫描即:@ComponentScan

添加@ComponentScan注解包扫描:

1@EnableAutoConfiguration
2@ComponentScan
3public class SpringBootMain {
4
5 public static void main(String[] args) {
6 SpringApplication.run(SpringBootMain.class, args);
7 }
8}

重新启动项目并访问,这次就可以正常返回值了。

优化注解

在使用上面的注解完成测试后,我们就可以简化下注解,将多个注解使用一个组合注解替换。比如@RestController就是一个组合注解,包含了

  • @Controller
  • @ResponseBody

使用组合可以简化代码,所以将上面的

  • @EnableAutoConfiguration
  • @ComponentScan 替换成组合注解SpringBootApplication:
1@SpringBootApplication
2public class SpringBootMain {
3
4 public static void main(String[] args) {
5 SpringApplication.run(SpringBootMain.class, args);
6 }
7}

发现@SpringBootApplication除了包括上面的两个注解外,还涵扩了以下注解:

  • @Target({ElementType.TYPE})
  • @Retention(RetentionPolicy.RUNTIME)
  • @Documented
  • @Inherited
  • @SpringBootConfiguration:配置项
  • @EnableAutoConfiguration:自动配置
  • @ComponentScan:注解扫描

实际上SrpingBoot的底层是用的Java的注解,使用Java的注解替我们做了大量的底层自动配置。 SpringBoot内部对大量的第三方库或Spring内部库进行了默认配置,这些配置是否生效,取决于我们是否引入了对应库所需的依赖,如果有那么默认配置就会生效。

所以,我们使用SpringBoot构建一个项目,只需要引入所需依赖,配置就可以交给SpringBoot处理了。

© 2020 by 毛俊的博客. All rights reserved.
Theme by LekoArts