Maven和Gradle通过插件支持Kotlin。Kotlin代码被编译成Java类并包含在构建过程中。Kobalt等比较新的构建工具看起来也很有前景。Kobalt受Maven/Gradle启发,但完全是用Kotlin编写的。
首先,将Kotlin插件依赖项添加到Maven或Gradle构建文件中。
如果你使用的是Spring和JPA,你还应该添加kotlin-spring和kotlin-jpa编译器插件。项目的编译和构建没有任何明显的差异。
如果要为Kotlin代码库生成JavaDoc则需要这个插件。
有针对IntelliJ和Eclipse Studio的IDE插件,但正如我们所预料的那样,Kotlin的开发和构建工具从IntelliJ关联中获益良多。从社区版开始,该IDE对Kotlin提供了一等支持。其中一个值得注意的特性是,它支持将现有的Java代码自动转换为Kotlin。这种转换很准确,而且是一种很好的学习Kotlin惯用法的工具。
与流行框架集成因为我们将Kotlin引入了现有的项目中,所以框架兼容性是一个问题。Kotlin完美融入了Java生态系统,因为它可以编译成Java字节码。一些流行的框架已经宣布支持Kotlin,包括Spring、Vert.x、Spark等。让我们看下Kotlin和Spring及Hibernate一起使用是什么样子。
Spring
Spring是Kotlin的早期支持者之一,在2016年首次增加支持。Spring 5利用Kotlin提供更简洁的DSL。你可以认为,现有的Java Spring代码无需任何更改就可继续运行。
Kotlin中的Spring注解
Spring注释和AOP都是开箱即用的。你可以像注解Java一样注解Kotlin类。考虑下面的服务声明片段。
@Service @CacheConfig(cacheNames = [TOKEN_CACHE_NAME], cacheResolver = "envCacheResolver") open class TokenCache @Autowired constructor(private val repo: TokenRepository) {这些是标准的Spring注解:
@Service: org.springframework.stereotype.Service
@CacheConfig: org.springframework.cache
注意,constructor是类声明的一部分。
@Autowired constructor(private val tokenRepo: TokenRepository)
Kotlin将其作为主构造函数,它可以是类声明的一部分。在这个实例中,tokenRepo是一个内联声明的属性。
编译时常量可以在注解中使用,通常,这有助于避免拼写错误。
final类处理Kotlin类默认为final的。它提倡将继承作为一种有意识的设计选择。这在Spring AOP中是行不通的,但也不难弥补。我们需要将相关类标记为open —— Kotlin的非final关键字。
IntelliJ会给你一个友好的警告。
你可以通过使用maven插件all open来解决这个问题。这个插件可以open带有特定注解的类。更简单的方法是将类标记为open。
自动装配和空值检查Kotlin严格执行null检查。它要求初始化所有标记为不可空的属性。它们可以在声明时或构造函数中初始化。这与依赖注入相反——依赖注入在运行时填充属性。
lateinit修饰符允许你指定属性将在使用之前被初始化。在下面的代码片段中,Kotlin相信config对象将在首次使用之前被初始化。
@Component class MyService { @Autowired lateinit var config: SessionConfig }