Micronaut Java 支持
对于 Java,Micronaut 使用 Java BeanDefinitionInjectProcessor 注解处理器在编译时处理类并生成 BeanDefinition 类。
这里的主要优点是你在编译时付出了一点代价,但在运行时,Micronaut 基本上是无反射的、快速的,并且消耗的内存很少。
在 Java 9+ 中使用 Micronaut
Micronaut 是用 Java 8 构建的,但在 Java 9 及更高版本上运行良好。 Micronaut 生成的类与同一个包中的现有类并排放置,因此不会违反有关 Java 模块系统的任何内容。
在 Micronaut 中使用 Java 9+ 时有一些注意事项。
javax.annotation 包
使用 CLI
如果您使用 Micronaut CLI 创建项目,如果您使用 Java 9+,则 javax.annotation 依赖项会自动添加到您的项目中。
包含@PostConstruct、@PreDestroy 等的javax.annotation 已从核心JDK 移至模块。一般来说,应该避免使用这个包中的注解,而是使用 jakarta.annotation 等价物。
使用 Gradle 进行增量注释处理
Micronaut 支持 Gradle 增量注释处理,它通过仅编译已更改的类来加速构建,避免完全重新编译。
但是,默认情况下禁用支持,因为 Micronaut 允许定义需要配置以进行处理的自定义元注释(例如定义自定义 AOP 建议)。
以下示例演示了如何为您在 com.example 包下定义的注释启用和配置增量注释处理:
Enabling Incremental Annotation Processing
tasks.withType(JavaCompile) {
options.compilerArgs = [
'-Amicronaut.processing.incremental=true',
'-Amicronaut.processing.annotations=com.example.*',
]
}
如果您不为您的自定义注释启用处理,它们将被 Micronaut 忽略,这可能会破坏您的应用程序。
使用 Project Lombok
Project Lombok 是一个流行的 Java 库,它通过注释处理器向 Java 语言添加了许多有用的 AST 转换。
由于 Micronaut 和 Lombok 都使用注释处理器,因此在配置 Lombok 时必须特别小心,以确保 Lombok 处理器在 Micronaut 的处理器之前运行。
如果您使用 Gradle,请添加以下依赖项:
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 处理器之后配置。颠倒声明的依赖项的顺序将不起作用。
配置 IDE
如果您依赖配置的构建工具(Gradle 或 Maven)来构建应用程序,则可以使用任何 IDE 来开发 Micronaut 应用程序。
但是,目前可以使用 IntelliJ IDEA 或 Eclipse 4.9 或更高版本在 IDE 中运行测试。
保留参数名称
默认情况下,Java 不会在编译时保留方法参数的参数名称数据。如果您没有显式定义参数名称并依赖于已编译的外部 JAR,这对 Micronaut 来说可能是个问题。
考虑这个界面:
Client Interface
interface HelloOperations {
@Get("/hello/{name}")
String hello(String name);
}
在编译时,参数名称 name 丢失并在编译时变为 arg0 或稍后通过反射读取。为避免此问题,您有两种选择。您可以显式声明参数名称:
Client Interface
interface HelloOperations {
@Get("/hello/{name}")
String hello(@QueryValue("name") String name);
}
或者,建议您将所有带有 -parameters 标志的字节码编译为 javac。例如在 build.gradle 中:
build.gradle
compileJava.options.compilerArgs += '-parameters'
更多建议: