国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Micronaut Java 支持

2023-03-13 11:48 更新

對于 Java,Micronaut 使用 Java BeanDefinitionInjectProcessor 注解處理器在編譯時處理類并生成 BeanDefinition 類。

這里的主要優(yōu)點是你在編譯時付出了一點代價,但在運行時,Micronaut 基本上是無反射的、快速的,并且消耗的內(nèi)存很少。

在 Java 9+ 中使用 Micronaut

Micronaut 是用 Java 8 構(gòu)建的,但在 Java 9 及更高版本上運行良好。 Micronaut 生成的類與同一個包中的現(xiàn)有類并排放置,因此不會違反有關(guān) Java 模塊系統(tǒng)的任何內(nèi)容。

在 Micronaut 中使用 Java 9+ 時有一些注意事項。

javax.annotation 包

使用 CLI

如果您使用 Micronaut CLI 創(chuàng)建項目,如果您使用 Java 9+,則 javax.annotation 依賴項會自動添加到您的項目中。

包含@PostConstruct、@PreDestroy 等的javax.annotation 已從核心JDK 移至模塊。一般來說,應(yīng)該避免使用這個包中的注解,而是使用 jakarta.annotation 等價物。

使用 Gradle 進(jìn)行增量注釋處理

Micronaut 支持 Gradle 增量注釋處理,它通過僅編譯已更改的類來加速構(gòu)建,避免完全重新編譯。

但是,默認(rèn)情況下禁用支持,因為 Micronaut 允許定義需要配置以進(jìn)行處理的自定義元注釋(例如定義自定義 AOP 建議)。

以下示例演示了如何為您在 com.example 包下定義的注釋啟用和配置增量注釋處理:

Enabling Incremental Annotation Processing

tasks.withType(JavaCompile) {
    options.compilerArgs = [
        '-Amicronaut.processing.incremental=true',
        '-Amicronaut.processing.annotations=com.example.*',
    ]
}

如果您不為您的自定義注釋啟用處理,它們將被 Micronaut 忽略,這可能會破壞您的應(yīng)用程序。

使用 Project Lombok

Project Lombok 是一個流行的 Java 庫,它通過注釋處理器向 Java 語言添加了許多有用的 AST 轉(zhuǎn)換。

由于 Micronaut 和 Lombok 都使用注釋處理器,因此在配置 Lombok 時必須特別小心,以確保 Lombok 處理器在 Micronaut 的處理器之前運行。

如果您使用 Gradle,請?zhí)砑右韵乱蕾図棧?/p>

Configuring Lombok in Gradle

compileOnly 'org.projectlombok:lombok:1.18.24'
annotationProcessor "org.projectlombok:lombok:1.18.24"
...
// Micronaut processor defined after Lombok
annotationProcessor "io.micronaut:micronaut-inject-java"

或者,如果使用 Maven:

Configuring Lombok in Maven

<dependencies>
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version>
    <scope>provided</scope>
  </dependency>
</dependencies>
...
<annotationProcessorPaths combine.self="override">
  <path>
    <!-- must precede micronaut-inject-java -->
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version>
  </path>
  <path>
    <groupId>io.micronaut</groupId>
    <artifactId>micronaut-inject-java</artifactId>
    <version>${micronaut.version}</version>
  </path>
    <path>
    <groupId>io.micronaut</groupId>
    <artifactId>micronaut-validation</artifactId>
    <version>${micronaut.version}</version>
  </path>
</annotationProcessorPaths>

在這兩種情況下(Gradle 和 Maven)Micronaut 處理器必須在 Lombok 處理器之后配置。顛倒聲明的依賴項的順序?qū)⒉黄鹱饔谩?/p>

配置 IDE

如果您依賴配置的構(gòu)建工具(Gradle 或 Maven)來構(gòu)建應(yīng)用程序,則可以使用任何 IDE 來開發(fā) Micronaut 應(yīng)用程序。

但是,目前可以使用 IntelliJ IDEA 或 Eclipse 4.9 或更高版本在 IDE 中運行測試。

保留參數(shù)名稱

默認(rèn)情況下,Java 不會在編譯時保留方法參數(shù)的參數(shù)名稱數(shù)據(jù)。如果您沒有顯式定義參數(shù)名稱并依賴于已編譯的外部 JAR,這對 Micronaut 來說可能是個問題。

考慮這個界面:

Client Interface

interface HelloOperations {
    @Get("/hello/{name}")
    String hello(String name);
}

在編譯時,參數(shù)名稱 name 丟失并在編譯時變?yōu)?nbsp;arg0 或稍后通過反射讀取。為避免此問題,您有兩種選擇。您可以顯式聲明參數(shù)名稱:

Client Interface

interface HelloOperations {
    @Get("/hello/{name}")
    String hello(@QueryValue("name") String name);
}

或者,建議您將所有帶有 -parameters 標(biāo)志的字節(jié)碼編譯為 javac。例如在 build.gradle 中:

build.gradle

compileJava.options.compilerArgs += '-parameters'


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號