W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
對于 Java,Micronaut 使用 Java BeanDefinitionInjectProcessor 注解處理器在編譯時(shí)處理類并生成 BeanDefinition 類。
這里的主要優(yōu)點(diǎn)是你在編譯時(shí)付出了一點(diǎn)代價(jià),但在運(yùn)行時(shí),Micronaut 基本上是無反射的、快速的,并且消耗的內(nèi)存很少。
在 Java 9+ 中使用 Micronaut
Micronaut 是用 Java 8 構(gòu)建的,但在 Java 9 及更高版本上運(yùn)行良好。 Micronaut 生成的類與同一個(gè)包中的現(xiàn)有類并排放置,因此不會(huì)違反有關(guān) Java 模塊系統(tǒng)的任何內(nèi)容。
在 Micronaut 中使用 Java 9+ 時(shí)有一些注意事項(xiàng)。
javax.annotation 包
使用 CLI
如果您使用 Micronaut CLI 創(chuàng)建項(xiàng)目,如果您使用 Java 9+,則 javax.annotation 依賴項(xiàng)會(huì)自動(dòng)添加到您的項(xiàng)目中。
包含@PostConstruct、@PreDestroy 等的javax.annotation 已從核心JDK 移至模塊。一般來說,應(yīng)該避免使用這個(gè)包中的注解,而是使用 jakarta.annotation 等價(jià)物。
使用 Gradle 進(jìn)行增量注釋處理
Micronaut 支持 Gradle 增量注釋處理,它通過僅編譯已更改的類來加速構(gòu)建,避免完全重新編譯。
但是,默認(rèn)情況下禁用支持,因?yàn)?nbsp;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 忽略,這可能會(huì)破壞您的應(yīng)用程序。
Project Lombok 是一個(gè)流行的 Java 庫,它通過注釋處理器向 Java 語言添加了許多有用的 AST 轉(zhuǎn)換。
由于 Micronaut 和 Lombok 都使用注釋處理器,因此在配置 Lombok 時(shí)必須特別小心,以確保 Lombok 處理器在 Micronaut 的處理器之前運(yùn)行。
如果您使用 Gradle,請?zhí)砑右韵乱蕾図?xiàng):
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 處理器之后配置。顛倒聲明的依賴項(xiàng)的順序?qū)⒉黄鹱饔谩?/p>
配置 IDE
如果您依賴配置的構(gòu)建工具(Gradle 或 Maven)來構(gòu)建應(yīng)用程序,則可以使用任何 IDE 來開發(fā) Micronaut 應(yīng)用程序。
但是,目前可以使用 IntelliJ IDEA 或 Eclipse 4.9 或更高版本在 IDE 中運(yùn)行測試。
保留參數(shù)名稱
默認(rèn)情況下,Java 不會(huì)在編譯時(shí)保留方法參數(shù)的參數(shù)名稱數(shù)據(jù)。如果您沒有顯式定義參數(shù)名稱并依賴于已編譯的外部 JAR,這對 Micronaut 來說可能是個(gè)問題。
考慮這個(gè)界面:
Client Interface
interface HelloOperations {
@Get("/hello/{name}")
String hello(String name);
}
在編譯時(shí),參數(shù)名稱 name 丟失并在編譯時(shí)變?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'
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: