0%

Spring Boot 快速开始

1 开始

创建 maven 工程,pom 中添加如下依赖。

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

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

编写一个主程序,用来启动 Spring boot 应用。

1
2
3
4
5
6
7
8
@SpringBootApplication // 用来标注一个主程序,说明这是一个SpringBoot应用
public class MainApplication {

public static void main(String[] args) {
// 启动
SpringApplication.run(MainApplication.class, args);
}
}

编写相关的 Controller、Service。

1
2
3
4
5
6
7
8
@SpringBootApplication // 用来标注一个主程序,说明这是一个SpringBoot应用
public class MainApplication {

public static void main(String[] args) {
// 启动
SpringApplication.run(MainApplication.class, args);
}
}

简化部署。添加插件后,用 maven-lifecycle-package 打包。在 target 目录下可找到打包好的 jar 包。之后在命令行中用java -jar命令即可启动。

1
2
3
4
5
6
7
8
9
<build>
<plugins>
<!--这个插件可以将应用打包成可执行的jar包-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

2 详解

2.1 pom 文件

  • 父项目

    1
    2
    3
    4
    5
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.7.RELEASE</version>
    </parent>

    spring-boot-starter-parent 还有一个父项目如下:

    1
    2
    3
    4
    5
    6
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>1.5.7.RELEASE</version>
    <relativePath>../../spring-boot-dependencies</relativePath>
    </parent>

    spring-boot-dependencies 这个项目中配置了项目对应的版本号。之后再引入依赖就不用写版本号了。

  • 依赖

    1
    2
    3
    4
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    spring-boot-starter-web

    spring-boot-starter:场景启动器。

    帮助导入了 web 模块正常运行需要的依赖。

Spring Boot 将所有功能场景抽取出来,做成 starters(启动器)。只要在依赖中引入 starter 相关的场景,就能实现对应的功能。

2.2 主程序类

1
2
3
4
5
6
7
8
@SpringBootApplication // 用来标注一个主程序,说明这是一个SpringBoot应用
public class MainApplication {

public static void main(String[] args) {
// 启动
SpringApplication.run(MainApplication.class, args);
}
}

@SpringBootApplication 注解标志了程序从哪里开始。SpringBoot 会调用标有这个注解的类的 main 方法来启动 SpringBoot 应用。这个注解由下列这些注解组成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@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 {

其中:

  • @SpringBootConfiguration 标注在某个类上,表示这是一个 SpringBoot 的配置类。这个注解上有 @Configuration 注解,可以用来标识配置类。@Configuration 上有 @Component 注解,是 Spring 的组件。

  • @EnableAutoConfiguration:开启自动配置。以前需要配置的东西,现在 SpringBoot 帮我们配置。这个注解底层使用了 @Import ,给容器导入Registrar类。将主配置类的所在包及下面所有子包的所有组件配置到 Spring 容器中。

    这个注解还使用了 @Import 导入了 EnableAutoConfigurationImportSelector 类。将需要的组件以全类名的方式返回,会给容器中导入很多自动配置类(xxxAutoConfiguration)。有了自动配置类,免去了我们手动编写配置注入功能组件的功能的工作。

J2EE的整体整合解决方案和自动配置都在 spring-boot-autoconfigure-1.5.7.RELEASE.jar 中。