全书目录

第四十六篇:Micronaut 完全指南 —— 编译期轻装侦察营宇宙

第五章:编译期 DI —— 侦察营为什么能轻装出发

1 分钟 307 字 第 853 / 962 个阅读单元

Micronaut 最标志性的能力之一,就是 compile-time dependency injection

看一个最基本的服务:

java
package example;

import jakarta.inject.Singleton;

@Singleton
public class MissionService {
    public String ping() {
        return "scout-ready";
    }
}

然后在控制器里注入:

java
package example;

import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;

@Controller("/health")
public class HealthController {

    private final MissionService missionService;

    public HealthController(MissionService missionService) {
        this.missionService = missionService;
    }

    @Get
    public String health() {
        return missionService.ping();
    }
}

这里表面上看,和很多注解框架很像。

但心智不一样。

Micronaut 的重点是:

Bean 定义、依赖关系、注入元信息,尽量在编译期就被处理并写入元数据。

这意味着什么?

意味着运行时不用大规模扫描 classpath 去“现场找人”。

你可以把它理解成:

text
重装军团
出门前:
“你是谁?你归谁管?你要跟谁协同?”
现场重新盘一遍

Micronaut 侦察营
出门前:
名册早就编好了
运行时直接照名册组队

这就是为什么 Micronaut 经常强调:

  • fast startup
  • low memory footprint
  • no runtime reflection for core DI model