在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ Kotlin編譯器插件
Kotlin內(nèi)聯(lián)函數(shù)
Kotlin開發(fā)環(huán)境設(shè)置(Eclipse)
Kotlin調(diào)用Java代碼
Kotlin使用Ant
Kotlin編譯器插件
Kotlin相等性
Kotlin JavaScript模塊
編寫Kotlin代碼文檔
Kotlin返回和跳轉(zhuǎn)
Kotlin異常處理
Kotlin可見性修飾符
Kotlin委托
Kotlin委托屬性
Kotlin編碼約定/編碼風(fēng)格
Kotlin基礎(chǔ)語法
使用Kotlin進(jìn)行服務(wù)器端開發(fā)
Kotlin接口
Kotlin反射
Kotlin類型別名
Kotlin枚舉類
Kotlin當(dāng)前版本是多少?
Kotlin注解處理工具
Kotlin類型的檢查與轉(zhuǎn)換
Kotlin屬性和字段
Kotlin類型安全的構(gòu)建器
Kotlin相比Java語言有哪些優(yōu)點(diǎn)?
Kotlin JavaScript反射
Kotlin 是什么?
Kotlin泛型
Kotlin慣用語法
Kotlin與OSGi
Kotlin數(shù)據(jù)類型
Kotlin是面向?qū)ο筮€是函數(shù)式語言?
Kotlin動(dòng)態(tài)類型
Kotlin協(xié)程
Kotlin操作符符重載
Kotlin使用Gradle
Kotlin密封類
Kotlin兼容性
Kotlin集合
Kotlin調(diào)用JavaScript
Kotlin null值安全
Kotlin函數(shù)
Kotlin開發(fā)環(huán)境設(shè)置(IntelliJ IDEA)
Kotlin嵌套類
Kotlin控制流程
Kotlin和Java語言比較
Kotlin 與 Java 語言兼容嗎?
Kotlin教程
Kotlin類和繼承
Kotlin對(duì)象表達(dá)式和對(duì)象聲明
JavaScript中調(diào)用Kotlin
Kotlin區(qū)間/范圍
Kotlin數(shù)據(jù)類
Kotlin lambda表達(dá)式
Kotlin是免費(fèi)的嗎?
Kotlin包
使用Kotlin進(jìn)行Android開發(fā)
在Java中調(diào)用Kotlin代碼
Kotlin this表達(dá)式
使用Kotlin進(jìn)行JavaScript開發(fā)
Kotlin擴(kuò)展
Kotlin解構(gòu)聲明
Kotlin注解
Kotlin使用Maven

Kotlin編譯器插件

全開放編譯器插件

Kotlin 有類及其默認(rèn)為 final 的成員,這使得像 Spring AOP 這樣需要類為 open 的框架和庫用起來很不方便。
這個(gè) all-open 編譯器插件會(huì)適配 Kotlin 以滿足那些框架的需求,并使用指定的注解標(biāo)注類而其成員無需顯式使用 open 關(guān)鍵字打開。
例如,當(dāng)你使用 Spring 時(shí),你不需要打開所有的類,而只需要使用特定的注解標(biāo)注,如
@Configuration@Service。
all-open 插件允許指定這些注解。

我們?yōu)槿_放插件提供 Gradle 和 Maven 以及 IDE 集成的支持。
對(duì)于 Spring,你可以使用 kotlin-spring 編譯器插件(見下文)。

如何使用全開放插件

build.gradle 中添加插件:

buildscript {
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
    }
}

apply plugin: "kotlin-allopen"

或者,如果你使用 Gradle 插件 DSL,將其添加到 plugins 塊:

plugins {
  id "org.jetbrains.kotlin.plugin.allopen" version "<使用的版本>"
}

然后指定會(huì)打開該類的注解:

allOpen {
    annotation("com.my.Annotation")
}

如果類(或任何其超類)標(biāo)有 com.my.Annotation 注解,類本身及其所有成員會(huì)變?yōu)殚_放。

它也適用于元注解:

@com.my.Annotation
annotation class MyFrameworkAnnotation

@MyFrameworkAnnotation
class MyClass // 將會(huì)全開放

MyFrameworkAnnotation 也是使類打開的注解,因?yàn)樗鼧?biāo)有 com.my.Annotation 注解。

下面是全開放與 Maven 一起使用的用法:

<plugin>
    <artifactId>kotlin-maven-plugin</artifactId>
    <groupId>org.jetbrains.kotlin</groupId>
    <version>${kotlin.version}</version>

    <configuration>
        <compilerPlugins>
            <!-- 或者 "spring" 對(duì)于 Spring 支持 -->
            <plugin>all-open</plugin>
        </compilerPlugins>

        <pluginOptions>
            <!-- 每個(gè)注解都放在其自己的行上 -->
            <option>all-open:annotation=com.my.Annotation</option>
            <option>all-open:annotation=com.their.AnotherAnnotation</option>
        </pluginOptions>
    </configuration>

    <dependencies>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-maven-allopen</artifactId>
            <version>${kotlin.version}</version>
        </dependency>
    </dependencies>
</plugin>

Kotlin-spring 編譯器插件

你無需手動(dòng)指定 Spring 注解,你可以使用 kotlin-spring 插件,它根據(jù) Spring 的要求自動(dòng)配置全開放插件。

buildscript {
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
    }
}

apply plugin: "kotlin-spring"

或者使用 Gradle 插件 DSL:

plugins {
  id "org.jetbrains.kotlin.plugin.spring" version "<使用的版本>"
}

其 Maven 示例與上面的類似。

該插件指定了以下注解:
@Component、
@Async、
@Transactional、
@Cacheable。
由于元注解的支持,標(biāo)注有 @Configuration、 @Controller、 @RestController@Service 或者 @Repository 的類會(huì)自動(dòng)打開,因?yàn)檫@些注解標(biāo)注有元注解 @Component

當(dāng)然,你可以在同一個(gè)項(xiàng)目中同時(shí)使用 kotlin-allopenkotlin-spring。
請(qǐng)注意,如果你使用 start.spring.io,kotlin-spring 插件將默認(rèn)啟用。

無參編譯器插件

無參(no-arg)編譯器插件為具有特定注解的類生成一個(gè)額外的零參數(shù)構(gòu)造函數(shù)。
這個(gè)生成的構(gòu)造函數(shù)是合成的,因此不能從 Java 或 Kotlin 中直接調(diào)用,但可以使用反射調(diào)用。
這允許 Java Persistence API(JPA)實(shí)例化 data 類,雖然它從 Kotlin 或 Java 的角度看沒有無參構(gòu)造函數(shù)(參見下面kotlin-jpa 插件的描述)。

如何使用無參插件

其用法非常類似于全開放插件。
添加該插件并指定注解的列表,這些注解一定會(huì)導(dǎo)致被標(biāo)注的類生成無參構(gòu)造函數(shù)。

在 Gradle 中使用無參插件方法:

buildscript {
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
    }
}

apply plugin: "kotlin-noarg"

或者使用 Gradle 插件 DSL:

plugins {
  id "org.jetbrains.kotlin.plugin.noarg" version "<使用的版本>"
}

然后指定注解類型:

noArg {
    annotation("com.my.Annotation")
}

在 Maven 中使用無參插件方法:

<plugin>
    <artifactId>kotlin-maven-plugin</artifactId>
    <groupId>org.jetbrains.kotlin</groupId>
    <version>${kotlin.version}</version>

    <configuration>
        <compilerPlugins>
            <!-- 或者 "jpa" 對(duì)于 JPA 支持 -->
            <plugin>no-arg</plugin>
        </compilerPlugins>

        <pluginOptions>
            <option>no-arg:annotation=com.my.Annotation</option>
        </pluginOptions>
    </configuration>

    <dependencies>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-maven-noarg</artifactId>
            <version>${kotlin.version}</version>
        </dependency>
    </dependencies>
</plugin>

Kotlin-jpa 編譯器插件

該插件指定
@Entity
@Embeddable
注解作為應(yīng)該為一個(gè)類生成無參構(gòu)造函數(shù)的標(biāo)記。
這就是如何在 Gradle 中添加該插件的方法:

buildscript {
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
    }
}

apply plugin: "kotlin-jpa"

或者使用 Gradle 插件 DSL:

plugins {
  id "org.jetbrains.kotlin.plugin.jpa" version "<使用的版本>"
}

其 Maven 示例與上面的類似。