49.5.1命名
您应该确保为您的启动器提供适当的命名空间。即使您使用不同的Maven groupId ,也不要使用 spring-boot 启动模块名称。我们可能会为您
将来自动配置的内容提供官方支持。
根据经验,您应该在启动后命名组合模块。例如,假设您正在为“acme”创建启动器,并且您将自动配置模
块 acme-spring-boot-autoconfigure 和启动器 acme-spring-boot-starter 命名为。如果您只有一个组合两者的模块,请将其命名
为 acme-spring-boot-starter 。
此外,如果您的启动器提供配置密钥,请为它们使用唯一的命名空间。特别是,不要将密钥包含在Spring Boot使用的名称空间中(例
如 server , management , spring 等)。如果您使用相同的命名空间,我们将来可能会以破坏您的模块的方式修改这些命名空间。
确保 触发元数据生成,以便为您的密钥提供IDE帮助。您可能需要查看生成的元数据( META-INF/spring-configuration-metadata.json )
以确保正确记录您的密钥。
49.5.2 autoconfigure 模块
autoconfigure 模块包含开始使用库所需的所有内容。它还可能包含配置键定义(例如 @ConfigurationProperties )以及可用于进一步自定
义组件初始化方式的任何回调接口。
您应该将库的依赖项标记为可选,以便您可以更轻松地在项目中包含 autoconfigure 模块。如果您这样做,则不提供库,默认情
况下,Spring Boot会退出。
Spring Boot使用注释处理器来收集元数据文件( META-INF/spring-autoconfigure-metadata.properties )中自动配置的条件。如果该文
件存在,则用于热切过滤不匹配的自动配置,这将缩短启动时间。建议在包含自动配置的模块中添加以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure-processor</artifactId>
<optional>true</optional>
</dependency>
对于Gradle 4.5及更早版本,依赖项应在 compileOnly 配置中声明,如以下示例所示:
dependencies {
compileOnly "org.springframework.boot:spring-boot-autoconfigure-processor"
}
对于Gradle 4.6及更高版本,应在 annotationProcessor 配置中声明依赖项,如以下示例所示:
dependencies {
annotationProcessor "org.springframework.boot:spring-boot-autoconfigure-processor"
}
49.5.3启动器模块
起动器真的是一个空罐子。它的唯一目的是提供必要的依赖项来使用库。您可以将其视为对入门所需内容的一种看法。
不要对添加启动器的项目做出假设。如果您自动配置的库通常需要其他启动器,请同时提及它们。如果可选依赖项的数量很高,则提供一组适当
的默认依赖项可能很难,因为您应该避免包含对典型库的使用不必要的依赖项。换句话说,您不应该包含可选的依赖项。
无论哪种方式,您的启动器必须直接或间接引用核心Spring Boot启动器( spring-boot-starter )(即如果您的启动器依赖于
另一个启动器,则无需添加它)。如果仅使用自定义启动程序创建项目,则核心启动程序将支持Spring引导的核心功能。
50. Kotlin的支持
Kotlin是一种针对JVM(和其他平台)的静态类型语言,它允许编写简洁而优雅的代码,同时提供 与Java编写的现有库的互操作性。
Spring Boot通过利用Spring框架,Spring数据和反应堆等其他Spring项目的支持,提供Kotlin支持。有关 更多信息,请参阅 Spring
Framework Kotlin支持文档。
从Spring Boot和Kotlin开始的最简单方法是遵循 这个全面的教程。您可以通过start.spring.io创建新的Kotlin项目 。如果您需要支持,请随意加
入Kotlin Slack的#spring频道或在Stack Overflow上使用 spring 和 kotlin 标签提问。
50.1要求
Spring Boot支持Kotlin 1.2.x. 要使用Kotlin,类路径上必须存在 org.jetbrains.kotlin:kotlin-stdlib
和 org.jetbrains.kotlin:kotlin-reflect 。也可以使用 kotlin-stdlib 变体 kotlin-stdlib-jdk7 和 kotlin-stdlib-jdk8 。
由于Kotlin类默认为final,因此您可能需要配置 kotlin-spring 插件以自动打开Spring - 带注释的类,以便可以代理它们。
在Kotlin中序列化/反序列化JSON数据需要Jackson的Kotlin模块。在类路径中找到它时会自动注册。如果Jackson和Kotlin存在但Jackson
Kotlin模块不存在,则会记录警告消息。
如果在start.spring.io上引导Kotlin项目,则默认提供这些依赖项和插件。
50.2无安全性
Kotlin的一个关键特性是零安全性。它在编译时处理 null 值,而不是将问题推迟到运行时并遇到 NullPointerException 。这有助于消除常见
的错误来源,而无需支付 Optional 等包装器的成本。Kotlin还允许使用具有可空值的功能构造,如本 Kotlin中关于零安全性的综合指南中所
述。
虽然Java不允许在其类型系统中表示null安全性,但Spring Framework,Spring Data和Reactor现在通过工具友好的注释提供其API的空安全
性。默认情况下,Kotlin中使用的Java API类型被识别为 放宽空检查的平台类型。Kotlin对JSR 305注释的支持与可空性注释相结合,为Kotlin
中相关的Spring API提供了空的安全性。
可以通过使用以下选项添加 -Xjsr305 编译器标志来配置JSR 305检查:-Xjsr305={strict|warn|ignore} 。默认行为与 -Xjsr305=warn 相
同。strict 值需要在从Spring API推断的Kotlin类型中考虑空安全性,但应该使用Spring API可空性声明甚至可以在次要版本和更多检查之间
发展的知识可能会在将来添加)。
尚不支持泛型类型参数,varargs和数组元素可空性。有关最新信息,请参见SPR-15942。另请注意,Spring Boot自己的API 尚未
注释。