众所周知,SLF4J是日志的外观。Ali的“ Java开发手册”中有相关记录:
那么他如何完成这件事呢?
根据官方网站,我们运行了一个演示
helloworld.java
pom.xml
操作结果
请注意,除了依靠SLF4JJ简单之外,这个地方还可以依靠SLF4J-LOG4J12,SLF4J-RELOAD4J,SLF4J-JDK14,SLF4J-NOP,SLF4J-JCL,logback-classic等等同于每个依赖关系
下载源代码,您可以看到每个模型都取决于SLF4J-API
官方网站上的图片还显示SLF4J-API应该是核心包
从上面的两张图片中,盲目猜测多年来写错误的经验浪潮。这应该是有东西要注册。
这很明显
代码非常简单,我不会再发布了,听起来很简单,所以您认为故事在这里吗?桥豆袋!staticloggerbinder的定义在哪里?可以看出staticloggerbinder在SLF4J--中定义了staticloggerbinder。API和每个实现之一都被定义了。因此,我同时介绍了SLF4J-API和特定的实现。这不是冲突吗?
但是,如果您在我的演示工程中搜索,则仅在“实现软件包”中的staticloggerbinder类别。哦?这个节目操作是什么?staticloggerbinder在slf4j-api中在哪里?或我的源代码下载有问题吗?
奥运会?似乎被这个框架删除了
但是这是什么?
搜索一些搜索后,我了解到这是一个蚂蚁插件。阶段意味着生命周期。我不会扩展这个生命周期(毕竟,我不理解),我们只需要知道编译后的过程类是执行的,并且在编译后执行。此代码的含义可能是在处理处理时的含义类(汇编之后),然后删除目标/类/org/slf4j/inply目录中的文件。
而且我们在SLF4J-API中的静态Loggerbinder就在此软件包之下。你发生了吗?
删除后,特定实施类的相关实施可以利用它并占据高处。我学会了它。
您认为这个故事在这里吗?
查看以红色设置的行代码
另一个代码是充分理解的,但是这是什么样的幽灵...
Get有一个案例,返回值是没有用的。为什么是这样?为什么要剂量绑定?这是涉及的类别加载知识。首先,让我们看一下演示代码
来面试问题。询问您是否不打开注释1和二注释二,只打开注释1,只打开注释2的三个情况,输出1的结果是什么?
如果您看到“深刻理解Java虚拟机”,那么这个问题应该并不陌生。我不会发布答案。简而言之,我们的静态变量应在类加载的初始化时完成。但是,如果没有执行方式的位置,则不会初始化。
从上面的示例中,我们可以理解SLF4J中句子的含义。
似乎问题已经存在。但是这里还有另一个问题。他为什么不在这里使用接口?在此类中,为什么不设计接口?制作接口显然更合理。考虑到这一点,我可以提及一个问题,然后更改它,混合一波知名的项目吗?
太简单的年轻人...看最新的分支,这确实被设计为接口,代码非常简单,我不会发布它,可能是以下逻辑:
上一个FindClass也已更改为以下代码FindServiceProviders:
奇怪的staticloggerbinder.getsingleton();也更改为提供商。Initialize();
好吧,这个故事就在这里。尽管有机会提及知名项目的PR,但我已经学会了一波知识。
原始:https://juejin.cn/post/7098185851347140639