NutzCN Logo
问答 源码阅读log实现里面的一些疑惑
发布于 2690天前 作者 qq_c54e87f6 1670 次浏览 复制 上一个帖子 下一个帖子
标签:

nutz的源码是依赖log4j的,但是代码仍旧可以运行的原因是什么呀,看到通用知识中的log配置的解锁没看明白,,

然后Logs中加载插件的时候判断插件是否存在,其中在imp下并没有CustomLogAdapter,Slf4jLogAdapter这两个类,这个是用来自己扩展的吗

望好心人解答一下不胜感激。。😂

来自炫酷的 NutzCN

7 回复

因为会依次判断哪个LogAdapter可用,当log4j相关类不存在时,Log4jLogAdapter就是不可用的,然后,兜底的SystemLogAdapter总是可用的,所以,起码有一个LogAdapter是可用的

@wendal 谢谢楼主的回答,就是nutz依赖log4j 但是如果用户没有加入log4j的jar的话,程序应该会报错吧,因为log4jLogAdapter里面用到了log4j中的类,,,但是实际上又没有报错。。。已经蒙了。。😂

来自炫酷的 NutzCN

你是不是以为java源文件里面import进来的类都需要全部存在且能加载,是这个类的所有方法可运行的必要条件?

@wendal 我是这么理解的,,,😂😂,,

来自炫酷的 NutzCN

class文件里面可没有import,源文件中import都会完全展开。

所有类都需要用到的时候才加载

例如,加载Log4jLogAdapter类时,会加载它的超类,所有属性的类,然后执行其静态初始化块及所有静态属性的初始化。

上面的加载,不包括方法内引用的类

方法内引用的类是方法被调用的时候才会加载的,构造方法也是方法的一种。

在建立实例时,对应的构造内的所引用的类才会加载,而且仅限该构造方法,如果有10个构造方法,那么另外9个构造方法所引用的类不会加载

同理,去调用实例方法或静态方法的时候,它们引用/使用的类才会加载

例如a,b,c,三个方法,分别引用A,B,C三个类,那么,如果不调用b,c方法,那B,C类不会加载,B,C类存在与否,不影响a方法的执行(●°u°●)​ 」

添加回复
请先登陆
回到顶部