目录1.SpringBoot简介2.SpringBoot安装2.1.基于Maven的安装2.2.基于Gradle的安装3.创建HelloWorld应用4.代码结构5.Configuration类5.1.导入其它配置6.自动化配置6.1.逐渐替换自动化配置6.2.禁止特定的自动化配置7.使用@SpringBootApplication注解总结
2.1. 基于 Maven 的安装Spring Boot 与 Apache Maven 3.2兼容。如果你还没有安装 Maven,可以按照 maven.apache.org 上的说明进行操作。
Spring Boot 依赖使用 org.springframework.boot 作为 groupId。通常情况下,你的 POM 文件会继承 spring-boot-starter-parent 工程,然后再声明一个或多个 Starters 的依赖。Spring Boot 同时也提供了一个可选的Maven 插件用来生成可执行的 Jar 包。
典型的 pom.xml 文件:`<?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> <groupId>com.example</groupId> <artifactId>myproject</artifactId>
<!-- 继承 Spring Boot 的默认值 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
</parent>
<!-- 为 Web 应用添加能用依赖 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- 打包成一个可执行 jar 包 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>`提示:
spring-boot-starter-parent 是使用 Spring Boot 的一种比较好的方式,但它并不适用于所有场景。有时,你可能需要继承一个不同的父级 Pom,或者你不喜欢这种默认的配置。你也可以通过声明一个 scope=import 的依赖来使用它:<dependencyManagement>
<dependencies>
<dependency>
<!-- 从 Spring Boot 导入依赖管理 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.2. 基于 Gradle 的安装相对 Maven 庞大的 XML 配置,我更喜欢 Gradle 多一点,不但简洁而且灵活性也好很多。Spring Boot 与 Gradle(2.9或以上)、Gradle 3兼容。如果你还没有安装 Gradle,你可以按照 www.gradle.org 上的操作说明来进行安装。
典型的 build.gradle 文件:plugins {
id 'org.springframework.boot' version '1.5.3.RELEASE'
id 'java'
}
jar {
baseName = 'myproject' version = '0.0.1-SNAPSHOT'
}
repositories {
jcenter()
maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
testCompile("org.springframework.boot:spring-boot-starter-test")
}
@RestController@EnableAutoConfigurationpublic class Example {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Example.class, args);
}
}`Example 类上的第一个注解 @RestController 是 @Controller 及 @ResponseBody 的组合,表明这是一个控制器,且所有响应数据都会被序列化到响应体里面返回。而方法上的 @RequestMapping 注解会为请求处理提供路由信息。这些注解都是 Spring 的,而不是 Spring Boot 特有的。
类上的第二个注解 @EnableAutoConfiguration 会告诉 Spring Boot 去通过依赖的 Jar 包配置 Spring 工程。因为 spring-boot-starter-web 里面包含有 Tomcat 及 Spring MVC,所以它会认为这是一个 Web 工程,并进行相应的 Spring 配置。
应用的最后一部分是一个 main 方法,它通过调用 SpringApplication 的 run 方法将应用程序委托给 Spring Boot。SpringApplication 将引导我们的应用程序启动 Spring 及自动配置的 Tomcat Web 服务。我们需要将 Example.class 作为一个参数传递给 run 方法来告诉 SpringApplication 它是主要的 Spring 组件。
运行 main 方法后,即可以使用浏览器打开地址 localhost:8080 会得到输出:
Hello World!
一般的应用都会使用 域名的反转 + 项目名 作为项目的统一包名前缀。如:com.qchery.funda。在 SpringBoot 的项目中,推荐使用如下布局:
com +- qchery +- funda +- Application.java | +- entity | +- Customer.java | +- dao | +- CustomerRepository.java | +- service | +- CustomerService.java | +- web +- CustomerController.java
其中,Application.java 文件如下:`import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;
@Configuration@EnableAutoConfiguration@ComponentScanpublic class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}`一般来说,我们会将 @EnableAutoConfiguration 注解放置在 主类上,也就是上面结构中的 Application.java。它隐式定义了包含某些搜索项的搜索包,例如,如果你正编写一个 JPA 的应用程序,那么带 @EnableAutoConfiguration 注解的类将会被用来搜索带有 @Entity 的类。
而 @ComponentScan 会用来自动扫描相应组件,由于 Application.java 是的根包名下,所以它不需要声明 basePackage 去指定需要扫描的包,默认为根包名,即:com.qchery.funda。
5.1. 导入其它配置在 SpringBoot 工程里面,我们不需要把所有的配置放置到一个类文件里面。它的 @Import 注解可以帮助我们导入其它的配置类,如果想要导入 XML 形式的配置,可以使用 @ImportResource 注解。另外,还可以使用 @ComponentScan 注解去扫描所有带有 @Configuration 注解的类。
6.1. 逐渐替换自动化配置自动化配置并不是侵入式的,在任何地方你都可以通过自定义配置来替换它。例如,如果你添加自己的数据库配置,那么默认的嵌入式数据库支持将会被退回。如果想要查看自动化配置是否生效,可以在运行程序时,加上 –debug 参数进行查看。
6.2. 禁止特定的自动化配置当你发现自动化配置不能按自己的意愿进行工作的时候,可以通过 @EnableAutoConfiguration 的 exclude 属性来禁用掉它们。`import org.springframework.boot.autoconfigure.;import org.springframework.boot.autoconfigure.jdbc.;import org.springframework.context.annotation.*;
@Configuration@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})public class MyConfiguration {}`
@SpringBootApplication // 等同于 @Configuration @EnableAutoConfiguration @ComponentScanpublic class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}`
相关推荐
© 2020 asciim码
人生就是一场修行