Micronaut 最标志性的能力之一,就是 compile-time dependency injection。
看一个最基本的服务:
package example;
import jakarta.inject.Singleton;
@Singleton
public class MissionService {
public String ping() {
return "scout-ready";
}
}然后在控制器里注入:
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 去“现场找人”。
你可以把它理解成:
重装军团
出门前:
“你是谁?你归谁管?你要跟谁协同?”
现场重新盘一遍
Micronaut 侦察营
出门前:
名册早就编好了
运行时直接照名册组队这就是为什么 Micronaut 经常强调:
- fast startup
- low memory footprint
- no runtime reflection for core DI model