SpringBoot官方文档个人学习总结(二)
文档链接:Spring Boot Reference Guide 2.0.0.RELEASE
三、 第三大部分 : Using Spring Boot
1.Build Systems:构建系统
推荐使用Maven或者Gradle,依据个人需求重点学习Maven。
(1). Dependency Management:依赖管理
每个Spring Boot版本都提供了它所支持的依赖关系的精选列表,无须特意指定SpringBoot会自动选择,不过想指定也可以,感觉约定大于配置的特点很突出。
(2). Maven
使用Maven工具时具体使用application.properties和application.yml进行资源过滤。${…}和@…@都是占位符要注意避免在非占位处使用。
- 第一点:继承 spring-boot-starter-parent
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
可利用以下设置来指定升级到哪个版本
<properties>
<spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>
- 第二点:解决Maven单继承问题
如果想继承多个父模块,可通过scope=import,例子如下:
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
同理可利用以下设置来指定升级到哪个版本:
<dependencyManagement>
<dependencies>
<!-- Override Spring Data release train provided by Spring Boot -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>Fowler-SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
- 第三点:使用springboot自带maven插件
SpringBoot自带了Maven插件可用于把插件打包成可执行jar包,可通过以下代码开启使用:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
(3). Gradle
这里列出了两个链接,详细地等之后需要再学习。
(4). Ant
这部分是Ant+ivy结合创建springboot启动项目,跳过
(5). 启动器
- 启动器是一组方便的依赖关系描述符,您可以将其包含在应用程序中。您可以获得所需的所有Spring和相关技术的一站式服务,而不必遍历样例代码和依赖描述符的复制-粘贴负载。
- 关于启动器的简单命名规则,第三方启动程序不应该使用Spring - Boot命名,因为它是为官方的Spring启动工件保留的。第三方启动程序通常以项目的名称开始。例如,第三方启动项目thirdpartyproject通常被命名为thirdpartyproject-spring-boot-starter。
- 列举了一些starters,目前还不知道哪些比较频繁使用,暂时不做深入
2.Structuring Your Code:构建代码
(1). 关于类的包声明
- 不鼓励而且应该避免使用 default 包,当一个类不包含包声明时,它被认为是在“默认包”中。对于使用@ComponentScan、@EntityScan或@SpringBootApplication注解的Spring启动应用程序,它可能会导致特定的问题,因为每个jar中的每个类都是被读取的。
- 建议遵循Java推荐的包命名约定,并使用反过来的域名,例如com.example.project。
(2). 定位主应用程序类
- 通常建议将主应用程序类定位在根包中,在其他类之上。
举例项目文件目录如下:
com
+- example
+- myapplication
+- Application.java
|
+- customer
| +- Customer.java
| +- CustomerController.java
| +- CustomerService.java
| +- CustomerRepository.java
|
+- order
+- Order.java
+- OrderController.java
+- OrderService.java
+- OrderRepository.java
- 其中Application.java主类代码例子如下:
package com.example.myapplication;
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
@ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@EnableAutoConfiguration注释通常放在主类上,隐式地定义了某些项的基本“搜索包”。如果主类位于根包中,允许使用@ComponentScan注解不需要指定basePackage属性,还可以使用@SpringBootApplication注解。
3.Configuration Classes:配置类
SpringBoot支持基于java的配置,虽然可以采用application.java+xml文件的形式来配置,但是推荐使用单独的@Configuration类。
(1). 导入其他配置类
无需将所有@Configuration放入单个类中。@Import注释可用于导入其他配置类。或者,您可以使用@ComponentScan自动获取与该类同目录下所有Spring components组件,包括@Configuration类。
@Import注解的较详细解释
(2). 导入XML配置
如果您必须使用基于XML的配置,我们建议您仍然从@Configuration类开始。然后可以使用@ImportResource注释来加载XML配置文件。
4.Auto-configuration:自动配置
Spring Boot自动配置尝试根据添加的jar依赖项自动配置Spring应用程序。
通过将@EnableAutoConfiguration或@SpringBootApplication注解添加到@Configuration类之一来选择自动配置。
注:只能添加一个@EnableAutoConfiguration注解。建议将其添加到主@Configuration类中。
(1). 逐步替代自动配置
自动配置具有非侵入性。意思是在任何时候都可以定义自己的配置来替换自动配置的特定部分。
(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 {
}
5.Spring Beans and Dependency Injection: Spring Beans 和依赖注入
- 可以自由地使用任何标准的Spring框架技术来定义bean及其注入的依赖项。为简单起见,使用@ComponentScan(查找bean)和@Autowired(执行构造函数注入)效果很好。
- 如果按照上面的建议构造代码目录(将应用程序类定位在根包中),则可以添加@ComponentScan,而不需要任何参数。所有应用程序组件(@Component、@Service、@Repository、@Controller等)都自动注册为Spring bean。
- 如果一个bean有一个构造函数,你可以省略@Autowired,如下面的例子所示:
@Service
public class DatabaseAccountService implements AccountService {
private final RiskAssessor riskAssessor;
//@Autowired
public DatabaseAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
}
// ...
}
6.Using the @SpringBootApplication Annotation: 使用@SpringBootApplication注解
许多 Spring Boot 开发人员总是用@configuration、@enableautoconfiguration 和@componentscan 注解主类。 由于这些注解经常一起使用,Spring Boot 提供了一个方便的@springbootapplication 注解替代。
- @ springbootapplication 注解相当于使用@configuration、@enableautoconfiguration 和@componentscan 的默认属性,如下面的示例所示:
package com.example.myapplication;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
7.Running Your Application: 运行主应用程序的方式
将应用程序打包为 jar 并使用嵌入式 HTTP 服务器的最大优点之一是,可以像运行其他应用程序一样运行应用程序。 调试 Spring Boot 应用程序也很容易,不需要任何特殊的 IDE 插件或扩展。
(1). 在 IDE 上直接运行
大多数 ide 可以直接导入 Maven 项目运行,如果不能直接导入,可以使用构建插件生成 IDE 元数据。 Maven 包括了 Eclipse 和 IDEA 的插件。 Gradle为许多 ide 提供插件。
(2). 打包成应用程序运行
- 如果你使用 Spring Boot Maven 或 Gradle 插件创建一个可执行 jar,可以在命令行使用 java -jar 运行你的应用程序,如下面的例子所示:
$ java -jar target/myapplication-0.0.1-SNAPSHOT.jar
- 还可以在启用远程调试支持的情况下运行打包应用程序。 这样做可以将调试器附加到打包的应用程序中,如下面的示例所示:
$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \
-jar target/myapplication-0.0.1-SNAPSHOT.jar
(3). 使用 Maven 插件运行
Spring Boot Maven 插件包含一个run,可用于快速编译和运行应用程序。 下面的例子展示了一个典型的 Maven 命令来运行 Spring Boot 应用程序:
$ mvn spring-boot:run
也可以使用 MAVEN opts 操作系统环境变量,如下面的例子所示:
$ export MAVEN_OPTS=-Xmx1024m
(4). 使用 Gradle 插件运行
暂时不用,跳过。
(5). 热插拔/热启动
利用Spring-boot-devtools进行应用程序快速重启,后续还将介绍详细信息,这里先略过。
8.Developer Tools: 开发工具
Spring Boot 包括一组额外的工具,可以使应用程序开发体验更愉快一些。 Spring-boot-devtools 模块可以包含在任何项目中,以提供额外的开发时特性。 要包含 devtools 支持,在你的构建中添加模块依赖项,如下面的 Maven 所示:(跳过Gradle)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
(1). 属性默认值
Spring Boot 支持的一些库使用缓存来提高性能。 例如,模板引擎缓存已编译的模板,以避免重复解析模板文件。 此外,springmvc 还可以在服务静态资源时向响应添加 HTTP 缓存头。
(2). 自动重启
使用 spring-boot-devtools 的应用程序在类路径上的文件发生更改时自动重新启动。 在 IDE 中工作时,这可能是一个有用的特性,因为它为代码更改提供了一个非常快速的反馈循环。 默认情况下,对类路径中指向文件夹的任何条目进行监视,以查看是否发生了更改。 请注意,某些资源(如静态资产和视图模板)不需要重新启动应用程序。
暂时看到这里,这一部分还剩一点以后再继续,果然官方文档不要轻易挑战