springboot项目,@Slf4j标签怎么办到在无需进行声明,直接使用log的?

发布于 2022-09-12 23:43:09 字数 139 浏览 12 评论 0

虽然知道Springboot有一些自动装配的机制,但是理论上来说这个应该连编译都过不了才对。想问问它底层是怎么实现的?是用什么方式动态注入?
image.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

つ可否回来 2022-09-19 23:43:09

java6 之后,就支持 annotation process了,这玩意可以做到在编译期执行你自定义的Processor,实现增强 Class 的功能,比如你可以在里面读取@slf4j注解,然后插入logger声明的代码:

private static final Logger logger = LoggerFactory.getLogger(WebExceptionHandler.class);
@SupportedAnnotationTypes(
  "yourpackage.BuilderProperty")
@SupportedSourceVersion(SourceVersion.RELEASE_8)
@AutoService(Processor.class)

// AbstractProcessor 实现 javax.annotation.processing.Processor
public class BuilderProcessor extends AbstractProcessor {

    @Override
    public boolean process(Set<? extends TypeElement> annotations, 
      RoundEnvironment roundEnv) {
      //这里是你的增强生成逻辑
        return false;
    }
}

javac的时候可以在classpath中添加实现了javax.annotation.processing.Processor 的 jar 或者 java 文件,然后在编译时就会调用这个Processor进行代码的增强了,和springboot没啥关系的。

比如:

javac -cp lombok.jar *.java

或者:

javac -processorpath lombok.jar -cp *.java

为什么 maven 中直接增加一个 lombok 的依赖也可以生效呢,那是因为 maven 帮你执行了javac,mave 在执行javac增加了 lombok.jar

image.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文