全书目录

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

第六章:编译期 AOP —— 巡逻规则不是现场口头补充,而是预写进作战手册

1 分钟 272 字 第 854 / 962 个阅读单元

Micronaut 不只是 DI 走编译期路线,AOP 也一样。

你可以把 AOP 理解成:

给某类任务统一套上巡逻规则。

比如:

  • 事务
  • 重试
  • 日志
  • 限流
  • 缓存
  • 安全拦截

在很多传统框架里,这类切面能力往往和运行时代理、反射、动态增强强绑定。

Micronaut 的特点是:

很多 AOP 所需元信息也尽量在编译期生成。

例如一个切面注解:

java
package example;

import io.micronaut.aop.Around;
import jakarta.inject.Singleton;

import java.lang.annotation.*;

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
@Around
public @interface ScoutLog {
}

拦截器:

java
package example;

import io.micronaut.aop.MethodInterceptor;
import io.micronaut.aop.MethodInvocationContext;
import jakarta.inject.Singleton;

@Singleton
public class ScoutLogInterceptor implements MethodInterceptor<Object, Object> {
    @Override
    public Object intercept(MethodInvocationContext<Object, Object> context) {
        long start = System.currentTimeMillis();
        try {
            return context.proceed();
        } finally {
            long cost = System.currentTimeMillis() - start;
            System.out.println(context.getMethodName() + " cost=" + cost + "ms");
        }
    }
}

业务方法:

java
package example;

import jakarta.inject.Singleton;

@Singleton
public class PermitService {

    @ScoutLog
    public String approve(String permitId) {
        return "approved:" + permitId;
    }
}

这套机制的类比很直白:

巡逻规则不是临时通知,而是早就写进了任务手册。

所以 Micronaut 的 AOP 不只是“也能做切面”。

它的关键在于:

切面能力和轻量运行时并不冲突。