Spring Boot初体验(一)快速入门

快速了解


spring boot为spring的延伸,传统的ssm开发已经离我们渐行渐远,在微服务的轰炸下,我们跟随者时代的发展迎接新技术。spring boot简化了配置功能,使开发人员更容易上手。一句话就是spring boot将spring进行封装,简化spring应用的创建、运行、调试、部署而出现的,让我们从繁琐的配置中解放出来。本博客是在实战中出结果,是从使用来去学习。

spring boot精要


  • 自动配置:自动提供相关配置,抛弃原有的xml配置,正常的启动spring要进行决定是否进行配置以及解析,而自动配置较少了spring 的判断,让开发者专注于应用开发。
  • 起步依赖:根据功能,引入需要的库,传统的功能需要我们自己去尝试jar包的版本,而起步依赖很简单,根据项目所需要的功能帮我们解决jar问题,spring 团队经过测试来选出适合的jar包版本,我们只需要告诉他需要web、jpa等功能即可。支持排除以及覆盖起步依赖。
  • 命令行界面:可选
  • Actuator: 深入了解运行中的spring应用。

项目搭建

本博主使用的为idea(eclipse的使用者请拥抱idea,好处谁用谁知道)。

  1. 创建项目(new project => Spring Initializr =>Next)
  2. 输入Group,Artifact => next => 选择Web (Group:top.wsylp(我的网址为wsylp.top),Artifact为项目名)。
  3. 选择Web,点击finish。
  4. 运行DemoApplication即可启动项目。

项目启动

spring boot的项目启动很简单,与main方法一样,只要运行*Application.java文件即可。这里运行DemoAppliction就会启动。

1
2
3
4
5
6
7
8
@SpringBootApplication//开启组件扫描和自动配置
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);//负责启动引导应用程序
}

}

与传统的main方法比较,仅仅简单的家里注解@SpringBootApplication ,那么它是如何做到的呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* Indicates a {@link Configuration configuration} class that declares one or more
* {@link Bean @Bean} methods and also triggers {@link EnableAutoConfiguration
* auto-configuration} and {@link ComponentScan component scanning}. This is a convenience
* annotation that is equivalent to declaring {@code @Configuration},
* {@code @EnableAutoConfiguration} and {@code @ComponentScan}.
*
* @author Phillip Webb
* @author Stephane Nicoll
* @since 1.2.0
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM,
classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

上面为部分注解的代码,大概意思为相当于配置。

从上述看到实际上@SpringBootApplication是将三个有用的注解组合在一起

  • @SpringBootConfiguration 实际上为spring 的@Configuration

依赖包

上面我们使用的是web应用,默认会把boot-starter-web给依赖。我们先看下spring-boot-starter-web包:

首先里面涵盖了:

  • spring-boot-starter

  • spring-boot-starter-json

  • spring-boot-starter-tomcat

  • hibernate-validator

  • spring-web

  • spring-mvc

从上面可以看出boot将包进行集成封装管理。启动也方便,不需要配置tomcat(spring-boot内置tomcat)。

pom.xml

来看看pom.xml与传统的ssm的配置区别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>top.wsylp</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>

<properties>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

父级依赖 spring-boot-starter-parent 这个相当于我的项目是spring-bootx项目,后续的包都是以这个为准的,也就是常用的不需要在写版本号了。

hello world

我们来在页面上输出一个“hello world”

HelloWorldController:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package top.wsylp.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* @Description:
* @Author: wsylp
* @Date: 2019/5/27 21:35
*/
@RestController
public class HelloWorldController {


/**
* @return
* @Description hello world
* @params
*/
@GetMapping("/helloWorld")
public String helloWorld() {

return "Hello World";
}


}

谷歌浏览器输入 ”http://localhost:8080/helloWorld“ ,页面返回为: Hello World

@RestController

这个注解是什么,为什么这么用?

源码:

1
2
3
4
5
6
7
8
9
10
11
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(
annotation = Controller.class
)
String value() default "";
}

ElementType.Type : 类、接口(包括注解)或枚举的声明;

@Controller :在ssm框架中用到的一样;

@ResponseBody : 表示该方法的返回结果直接写入 HTTP response body 中,加上该注解返回结果不会解析为跳转路径;

既然返回值,那么当我们返回一个对象,前台会是什么效果呢?

User:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package top.wsylp.demo.model;

/**
* @Description: 用户对象
* @Author: wsylp
* @Date: 2019/5/29 22:02
*/
public class User {

private String dah ;

private String name;

public String getDah() {
return dah;
}

public void setDah(String dah) {
this.dah = dah;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

然后增加方法:getUser()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* @Description
* @params
* @return
*/
@GetMapping("/getUser")
public Object getUser() {

User user =new User();

user.setDah("admin");
user.setName("超级管理员");

return user;

}

访问 “http://localhost:8080/getUser” 返回为

1
{"dah":"admin","name":"超级管理员"}

发现默认返回为Json。

本文标题:Spring Boot初体验(一)快速入门

文章作者:wsylp

发布时间:2019年05月27日 - 20:05

最后更新:2020年01月02日 - 10:01

原始链接:http://wsylp.top/2019/05/27/Spring-Boot初体验(一)快速入门/

许可协议: 本文为 wsylp 版权所有 转载请保留原文链接及作者。

-------------本文结束感谢阅读-------------