Java注解创建局部变量:@Slf4j如何暴露log变量供代码调用
@Slf4j注入log变量的实现逻辑
你看到的@Slf4j注解本身仅为标记用的元数据,实际的log变量注入逻辑由Lombok注解处理器在Java编译阶段完成,和注解本身的定义无关。
核心原理说明
- 你贴出的注解源码中
@Retention(RetentionPolicy.SOURCE)已经明确说明该注解仅保留在源码阶段,编译生成class文件后就会被擦除,本身不包含任何运行时逻辑。 - Lombok会在JDK的编译流程中注册自定义的注解处理器,在编译的注解处理阶段扫描所有标注了
@Slf4j的类。 - 扫描到对应类后,Lombok会自动向类中插入静态log成员变量的代码,默认插入的内容为:
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(当前标注类的类名.class);
- 如果指定了
topic参数,比如@Slf4j(topic = "customLogger"),插入的代码会调整为:
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger("customLogger");
验证方式
你可以直接反编译项目中使用了@Slf4j注解的类的class文件,就能看到自动生成的log成员变量,源码中不需要显式定义该变量。
内容的提问来源于stack exchange,提问作者MFEB
相关产品推荐
相关产品推荐

