如何阅读Nutz的源码

 我来答
mxhg222
推荐于2017-09-27 · 知道合伙人教育行家
mxhg222
知道合伙人教育行家
采纳数:25011 获赞数:251230
毕业于中国海洋大学,本科学历,从事本专业工作20多年

向TA提问 私信TA
展开全部

       
开始学习框架思想了,打算先从nutz入手,因为nutz是国人写的,中文注释,容易理解

而且nutz框架比较小,但是麻雀虽小五脏俱全,大牛的思想还是可以学到的.

1、

这个是log的包信息,基本上有了一个大题的介绍

2.接口 public interface Log

  五个级别trace,info,warn,debug,fatal这个都比较容易理解

提供了3个约等于重载的方法

他提工具了一个抽象实现类,实现了部分功能但是主要的输出还是在两个适配器中的内部类进行输出的

这个AbstractLog  提供了一个主要的方法makeInfo目的就是产生下面介绍的LogInfo 对象,

对之前的方法重载做统一处理

但是输出地还是在适配器的内部类当中

static class Log4JLogger extends AbstractLog 

static class SystemLog extends AbstractLog



3.信息 LogInfo 定义的比较简单信息message,异常Throwable


4.日志适配器   (适配器模式出来了哈,不过我也用过适配器模式)  LogAdapter

这里就把system.out.print和log4j进行了适配,再利用他的插件机制,动态获取

传送门http://www.cnblogs.com/wangjq/archive/2012/07/09/2582485.html

这里只定义一个方法获取log其实需要的也就这个


他提供3个适配器

1.NopLog 什么都不干适配器

2.SystemLogAdapter 这个应该很明显了输出到控制台

3.Log4jLogAdapter 这个应该是最常用也是最主要用的

不过最好再提供个SLF4jLogAdapter 这样看nuth的扩展性存在一点小问题

 

他是在这里写死的,不如配置的容易定义

5.Logs 这个也是最主要最常用的了

他静态初始化了适配器的

private static LogAdapter adapter;

然后提供静态方法 getLog这样就想平常一样调用上面的输出了

这里if感觉多此一举,既然这样判断何不在warn里面判断呢(效率问题),感觉这样写法有点蛋疼,


AiPPT
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图... 点击进入详情页
本回答由AiPPT提供
柒七6NN91
2012-10-14 · TA获得超过107个赞
知道答主
回答量:138
采纳率:0%
帮助的人:174万
展开全部
樵谑褂�,意义已经不大建议重点关注的类/接口: Mirror Castors Json Lang Files Streams Log Log4jLogAdapter SimplePluginManager MultiLineProperties反向注入/依赖注入 – Ioc 由于Spring的横行,许多童鞋连Ioc的基本原理都已经忘掉了 IocLoader负责加载配置信息(如js,注解) Ioc(NutIoc)按配置信息生成具体对象(bean) IocContext按配置信息管理bean的生命周期(create/fetch/depose)建议重点关注的类/接口: Ioc Ioc2 NutIoc IocLoader AnnotationIocLoader JsonLoader MapLoaderNutz的ORM – Dao ORM的基本概念,就是POJO持久化. 请留意,这个package与Ioc无任何直接联系.NutIoc并不会特殊照顾NutDao,两者可以说是互不相识的. EntityMaker(AnnotationEntityMaker)将Pojo所对应的类转换为Entity(配置信息) Dao(NutDao)按Entity所提供的信息,将操作(insert/update/fetch等),转换为DaoStatement(抽象的Dao语句) DaoExecutor(NutDaoExecutor)将DaoStatement转换为JDBC语句 DaoRunner(NutDaoRunner)负责执行具体的JDBC语句,并管理连接获取/释放/事务控制建议重点关注的类/接口: 上面提到了各个类,并加上Sqls类Http服务 – MVC 主线: Loading(NutLoading)加载配置信息,UrlMapping(UrlMappingImpl)保存路径映射信息,ActionChain(NutActionChain)按链式处理具体请求建议重点关注的类/接口: NutFilter ActionHandler ActionContext DefaultViewMaker Mvcs ComboIocProvider org.nutz.mvc.impl.processor下的处理器实现类切面编程 – Aop 这部分的代码,除具体的asm代码外,还是比较好懂的. org.nutz.aop.asm包里面的代码,由于操作的是Java字节码,必须苦涩难懂. Aop的具体模型,请参阅手册. 建议重点关注的类/接口: AbstractClassAgent InterceptorChain LoggingMethodInterceptor表达式 – EL 这玩意我自己也没仔细看完,主要是jukai和zozoh实现的,我就不多嘴了.资源扫描 – resource 找jar里面的文件,通过package获取里面的全部类,都靠这个package的实现建议重点关注的类/接口: Scans WebResourceScan LocalResourceScan其他一些零碎的package: conf – jukai设计,被zozoh否决,现在仅el包还有引用,只有一个类,与EL一起看看吧 filepool – 文件池,放临时文件的,NutDao操作Clob/Blob数据,MVC的upload会用到 http – 简单的http客户端,功能简单够用(够我们自己用…) img – 图像操作 mock – 最初的计划是完成一个Mock框架,后来缩减为mock servlet的,用来模拟servlet容器 org.nutz.repo.org.objectweb.asm – 被我精简过的asm 3.3,全是字节码操作,枯燥乏味. service – NutDao的小封装,看完Dao不妨看这个 trans – NutDao的事物封装,跟service一样,看完Dao再看看呗读源码的方法: 大大前提,把nutz的源码全下载下来,按手册的说明,把test跑通. 1. 堆栈例如Ioc,你肯定想知道一个bean是如何被创建的. 那么,在你的类的构造方法中,加入一句: new Throwable().printStackTrace(); 跟着堆栈一层层了解debug 这个更狠一些,顺着代码的执行,想深入的地方就进入,不感兴趣的地方就next,形成一个流程的概念.看testcase 由于testcase是使用场景抽象出来的代码,所以很有参考价值.附上几个Eclipse快捷键: ctrl+shift+T 查找某个类 ctrl+L 跳到具体的行数 alt+shift+b 打开源码视图上方的导航条,方便跳转到某个方法看Nutz代码时,我非常非常建议你记录下任何错误,并报告给我们.即使是错别字,我们也很开心得收到你的指正哦← PreviousArchiveNext →blog comments powered by Disqus
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
echoyxd
高粉答主

2015-05-20 · 醉心答题,欢迎关注
知道大有可为答主
回答量:1.4万
采纳率:83%
帮助的人:524万
展开全部
读源码的方法: 大大前提,把nutz的源码全下载下来,按手册的说明,把test跑通. 1. 堆栈 例如Ioc,你肯定想知道一个bean是如何被创建的. 那么,在你的类的构造方法中,加入一句: new Throwable().printStackTrace(); 跟着堆栈一层层了解
debug 这个更狠一些,顺着代码的执行,想深入的地方就进入,不感兴趣的地方就next,形成一个流程的概念.
看testcase 由于testcase是使用场景抽象出来的代码,所以很有参考价值.
附上几个Eclipse快捷键: ctrl+shift+T 查找某个类 ctrl+L 跳到具体的行数 alt+shift+b 打开源码视图上方的导航条,方便跳转到某个方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式