- 浏览: 1680259 次
- 性别:
- 来自: 杭州699号
文章分类
最新评论
-
莫莫摸:
为什么不用dubbo
RCP数据传输模型回顾 -
大胡子爸爸:
String, Class 都实现了Serializable接 ...
RPC框架几行代码就够了 -
lss598018587:
谢谢大神分享,比起新手看复杂的dubbo框架还不如看大神的这一 ...
RPC框架几行代码就够了 -
15606915740:
你好,请问一下。<dubbo:consumer filt ...
Dubbo文档 -
joqk12345:
...
一些设计上的基本常识
这里说的版本是:FreeMarker 2.3.10 (April 20, 2007)
freemarker.core.TemplateElement 第101行:
居然在SimpleSequence result = null;后直接调用result.add(nestedBlock);
这行代码永远空指针异常!
freemarker.core.StopException 第84行:
if (msg != null & !msg.equals("")) 没有用 短路与“&&” 而是 “&”,
当msg == null时, msg.equals("")总是会被调用,总是空指针异常!
else语句一点作用都没有。
freemarker.template.ObjectWrapper 第77行
freemarker.template.DefaultObjectWrapper 第70行
其中,DefaultObjectWrapper 是 ObjectWrapper 的子类。
他居然在父类静态块初始化过程中调用子类初始化方法,
晕倒,子类怎么能在父类之前实例化,这只会使构造失败,经常出一些莫明其妙的错误。
太多了,诸如此类问题用FindBugs就能查出几十个,
还有N多没用到的变量,方法,内部匿名类,到处乱七八糟,
不知道作者怎么对得起这么多用户。
同样的方法检查Spring和Hibernate,所有代码都写很严谨,也没有任何无用代码。
很无语...
嗯,知道,当时就已经提交给FreeMarker的作者了。
必然的啦。。。。。
Freemarker 在设计上的缺陷更大,所有包都存在循环依赖,
你可以用JDepend试一下,所有包都是“感叹号”,
并且没有任何层次结构,更别说朝着稳定的方向依赖了,
REP, CRP, CCP, ADP, SDP, SAP等原则无一遵守。
其Visitor实现也很难扩展,这可能是Visitor通病。
主要领域对象的生命周期事件也没有。
宁愿每个对象做Wrapper,也不用总体装饰器或AOP拦截器,搞得Wrapper满天飞。
太多了,有空再总结。
还有我以前发的关于TemplateLoader的缺陷:
http://javatar.iteye.com/blog/80197
Freemarker 就是一个典型的 Visitor 模式. 上面那些bug明显都是一些低级错误, 不影响使用就可以了.
&&才是短路的,&是非短路。已测。
freemarker.core.TemplateElement 第101行:
public TemplateSequenceModel getChildNodes() { if (nestedElements != null) { return new SimpleSequence(nestedElements); } SimpleSequence result = null; if (nestedBlock != null) { result.add(nestedBlock); } return result; }
居然在SimpleSequence result = null;后直接调用result.add(nestedBlock);
这行代码永远空指针异常!
freemarker.core.StopException 第84行:
public void printStackTrace(PrintStream ps) { String msg = this.getMessage(); ps.print("Encountered stop instruction"); if (msg != null & !msg.equals("")) { ps.println("\nCause given: " + msg); } else ps.println(); super.printStackTrace(ps); }
if (msg != null & !msg.equals("")) 没有用 短路与“&&” 而是 “&”,
当msg == null时, msg.equals("")总是会被调用,总是空指针异常!
else语句一点作用都没有。
freemarker.template.ObjectWrapper 第77行
ObjectWrapper DEFAULT_WRAPPER = DefaultObjectWrapper.instance;
freemarker.template.DefaultObjectWrapper 第70行
static final DefaultObjectWrapper instance = new DefaultObjectWrapper();
其中,DefaultObjectWrapper 是 ObjectWrapper 的子类。
他居然在父类静态块初始化过程中调用子类初始化方法,
晕倒,子类怎么能在父类之前实例化,这只会使构造失败,经常出一些莫明其妙的错误。
太多了,诸如此类问题用FindBugs就能查出几十个,
还有N多没用到的变量,方法,内部匿名类,到处乱七八糟,
不知道作者怎么对得起这么多用户。
同样的方法检查Spring和Hibernate,所有代码都写很严谨,也没有任何无用代码。
很无语...
评论
29 楼
javatar
2013-08-22
shinwell 写道
经查代码发现,楼主发现的几个问题在FreeMarker 2.3.20(27 June 2013 released)中已经修复,其中上门提到的ObjectWrapper已经变成一个接口。
嗯,知道,当时就已经提交给FreeMarker的作者了。
28 楼
shinwell
2013-08-19
经查代码发现,楼主发现的几个问题在FreeMarker 2.3.20(27 June 2013 released)中已经修复,其中上门提到的ObjectWrapper已经变成一个接口。
27 楼
dualface
2007-08-22
cnpollux 写道
幸好这是老外写的。要是国人写的,会不会又被骂个狗血喷头?
必然的啦。。。。。
26 楼
javatar
2007-08-22
通用组件的设计与应用程序最大的不同就是其API导出后是不可以改变,因为向前兼容是组件生存的根本,如果API设计很差,也只好遗臭万年,如果扩展性设计不好,第三方无法进行扩展,当遇到特殊问题,用户只能眼巴巴等着作者在下一个版本加入此功能,如果作者没时间或力所不及,那就只好发点唠骚了事,牛点的可以自己修改源代码,但却无法再使用新版本修复的一些问题。
25 楼
zengjinliang
2007-08-21
本来想下来用用的,想不到那么多问题,汗~~~
24 楼
cnpollux
2007-08-21
幸好这是老外写的。要是国人写的,会不会又被骂个狗血喷头?
23 楼
geszJava
2007-08-21
喜欢velocity,freemark没有怎么用过,不过看到这两段代码,感觉很失败.完全就是刚毕业的新手写的.不管对用户影响大不大,这种不严谨的态度让人很失望.
22 楼
kevinming
2007-08-21
楼主的钻研值得学习~
21 楼
together
2007-08-21
代码确实很差劲.
一直在使用velocity,大小应用都还没出现过什么问题.
一直在使用velocity,大小应用都还没出现过什么问题.
20 楼
hongliang
2007-08-19
楼主精神可嘉!
不过回过头来说,这些代码都是internal的,对用户不可见,问题不像想象中的那么大。
不过回过头来说,这些代码都是internal的,对用户不可见,问题不像想象中的那么大。
19 楼
Classicning
2007-08-19
觉得功能上还可以,可能代码里面还是比较粗糙的吧,加油加油啊
18 楼
javatar
2007-08-17
Torr 写道
这些问题可以通过工具查出来. 要是设计上的问题, 那就很糟糕了. 呵呵
有一点很肯定, freemarker 的性能需要提升.
有一点很肯定, freemarker 的性能需要提升.
Freemarker 在设计上的缺陷更大,所有包都存在循环依赖,
你可以用JDepend试一下,所有包都是“感叹号”,
并且没有任何层次结构,更别说朝着稳定的方向依赖了,
REP, CRP, CCP, ADP, SDP, SAP等原则无一遵守。
其Visitor实现也很难扩展,这可能是Visitor通病。
主要领域对象的生命周期事件也没有。
宁愿每个对象做Wrapper,也不用总体装饰器或AOP拦截器,搞得Wrapper满天飞。
太多了,有空再总结。
还有我以前发的关于TemplateLoader的缺陷:
http://javatar.iteye.com/blog/80197
17 楼
hpq852
2007-08-17
Torr 写道
这些问题可以通过工具查出来. 要是设计上的问题, 那就很糟糕了. 呵呵
有一点很肯定, freemarker 的性能需要提升.
有一点很肯定, freemarker 的性能需要提升.
Freemarker 就是一个典型的 Visitor 模式. 上面那些bug明显都是一些低级错误, 不影响使用就可以了.
16 楼
Torr
2007-08-16
这些问题可以通过工具查出来. 要是设计上的问题, 那就很糟糕了. 呵呵
有一点很肯定, freemarker 的性能需要提升.
有一点很肯定, freemarker 的性能需要提升.
15 楼
nihongye
2007-08-16
很好用的说,一些差的代码不会改变我对它的喜欢。楼主指出问题来值得称赞。
14 楼
sg552
2007-08-16
一年前就听说FREEMAKER有很著名的BUG。
看来当初没学就对了。
看来当初没学就对了。
13 楼
Garriot
2007-08-16
DavidBauer 写道
freemarker.core.StopException 第84行:
if (msg != null & !msg.equals("")) 没有用 短路与“&&” 而是 “&”,
当msg == null时, msg.equals("")总是会被调用,总是空指针异常!
else语句一点作用都没有。
貌似用这个"&"才是短路与吧
public void printStackTrace(PrintStream ps) { String msg = this.getMessage(); ps.print("Encountered stop instruction"); if (msg != null & !msg.equals("")) { ps.println("\nCause given: " + msg); } else ps.println(); super.printStackTrace(ps); }
if (msg != null & !msg.equals("")) 没有用 短路与“&&” 而是 “&”,
当msg == null时, msg.equals("")总是会被调用,总是空指针异常!
else语句一点作用都没有。
貌似用这个"&"才是短路与吧
&&才是短路的,&是非短路。已测。
12 楼
fishinlove
2007-08-16
本来还打算用FreeMarker 没有仔细读过源码,看来还是算了。
11 楼
DavidBauer
2007-08-15
freemarker.core.StopException 第84行:
if (msg != null & !msg.equals("")) 没有用 短路与“&&” 而是 “&”,
当msg == null时, msg.equals("")总是会被调用,总是空指针异常!
else语句一点作用都没有。
貌似用这个"&"才是短路与吧
public void printStackTrace(PrintStream ps) { String msg = this.getMessage(); ps.print("Encountered stop instruction"); if (msg != null & !msg.equals("")) { ps.println("\nCause given: " + msg); } else ps.println(); super.printStackTrace(ps); }
if (msg != null & !msg.equals("")) 没有用 短路与“&&” 而是 “&”,
当msg == null时, msg.equals("")总是会被调用,总是空指针异常!
else语句一点作用都没有。
貌似用这个"&"才是短路与吧
10 楼
lszone
2007-08-15
我也再尝试使用freemarker,不会代码真的这么差吧?
发表评论
-
以HTTL为例讲讲模块分包&领域模型&扩展框架
2011-10-09 20:08 16445注:该博客内容已加入 ... -
CommonTemplate增加HTML标签版语法外套
2008-09-09 10:33 2923CommonTemplate(http://www.commo ... -
CommonTemplate访问者设计思考
2008-09-03 10:45 1709经过多个版本的调整, CommonTemplate(http: ... -
CommonTemplate发布0.8.6版本
2008-08-26 20:49 1761CommonTemplate发布0.8.6版本 ... -
CommonTemplate发布0.8.5版本
2008-08-04 13:23 1842CommonTemplate发布0.8.5版本(2008-08 ... -
CommonTemplate加入代码生成器
2008-07-21 13:15 2195模板引擎经常被用于做代码生成, 为此, CommonTempl ... -
加入对YAML数据格式的支持
2008-07-01 12:41 3956CommonTemplate(http://www.commo ... -
嵌套注释语法思考
2008-06-29 14:40 3918主流的C/C++/Java/C#等语言,都将注释语法设计成不可 ... -
转:开源协议
2008-06-10 17:23 2162来源:网络 (1)Contrib ... -
CommonTemplate完成查看器Viewer.exe(及安装程序)
2008-06-04 15:12 1833完成查看器初始版本. 实现功能: 双击*.ctl文件, 自动读 ... -
CommonTemplate完成外部构建树或表达式接口
2008-05-31 11:01 1910CommonTemplate: http://www.comm ... -
CommonTemplate异常国际化完成
2008-05-26 11:48 1892周未把一个累活给干了, 就是异常信息的国际化. 总共有220多 ... -
CommonTemplate加入对无穷数的支持.
2008-05-23 11:07 2707用"*"号表示无穷数, 常在下标号中使用, ... -
CommonTemplate导出模板所需变量结构
2008-05-12 18:28 2231在velocity的邮件列表中收到下面的邮件: Simon G ... -
CommonTemplate完成$snatch指令
2008-05-06 09:20 1857CommonTemplate(http://www.commo ... -
关于CTE当前API无法支持从非引擎方式构建模板树
2008-04-28 17:20 1760因隐藏了模板树的实现, 现在CommonTemplate(ht ... -
CommonTemplate完成DEBUG单步调试
2008-04-21 09:56 2481CommonTemplate(http://www.commo ... -
CommonTemplate准备加入$breakpoint指令
2008-04-19 10:30 2154准备在CommonTemplate( http://www.c ... -
很高兴桂林兄加入CommonTemplate的开发
2008-04-05 20:49 2893桂林的blog: http://jasongreen.itey ... -
展开式序列实现
2008-03-31 22:47 2041现在CommonTemplate(http://www.com ...
相关推荐
代码生成器支持model、Mapper、Dao、Service、ServiceImpl、Controller 一次性的生成,支持同时生成多张表,此代码生成器依赖JAR包比较少,除了必用Freemarker 和JDBC之外基本上完全个人编写
freemarker实现代码生成器详细教程
freemarker自学代码
springmvc+mybatis 和一个简单的freemarker代码生成工具
freemarker 源代码包freemarker 源代码包freemarker 源代码包freemarker 源代码包freemarker 源代码包
JavaEE源代码 freemarker-2.3.8JavaEE源代码 freemarker-2.3.8JavaEE源代码 freemarker-2.3.8JavaEE源代码 freemarker-2.3.8JavaEE源代码 freemarker-2.3.8JavaEE源代码 freemarker-2.3.8JavaEE源代码 freemarker-...
SpringBoot中整合freemarker示例代码
基于Freemarker模板的纯Java代码实现的代码生成器工具
什么是FreeMarker? ................................................................................................. 7 我们应该阅读什么内容? .............................................................
使用Spring boot + FreeMarker 实现代码生成功能,完整案例可以查看 eladmin 项目,教程地址: https://www.ydyno.com/archives/1177.html
关于freemarker的jar包和代码例子
根据数据库表生成所有模板定制的类 想要生成什么类自己写模板就可以,如果想要修改源代码也可以,因为总共才12个类,应该很好看明白
FreeMarker,FreeMarker
Freemaker是一个强大的模板引擎,相比velocity而言,其强大的过程调用、递归和闭包回调功能让freemaker可以完成几乎所有我们所想的功能。从个人看法而言,freemaker完全有能力作为MDA的代码辅助生成工具。 <br>
NULL 博文链接:https://sunfish.iteye.com/blog/1386480
附件包含了mybatis-plus自动生成代码,基于freemarker的模板。包括常规的curd。 【特点】针对每个接口都有对应的入参和出参,不公用entity。 如,add接口,则入参会自动生成为addEntityReq。具体可下载模板进行查看...
FreeMarker
安装freemarker插件(freemarker的eclipse插件) a) 首先下载 freemarker-ide-0.9.14.zip(在这里不用下载了,附件中已经有了) b) 解压后:把hudson.freemarker_ide_0.9.14这个文件放到:eclipse\plugins下面 c) 发现...
基于Freemarker模板的代码生成器实体映射xml的ftl模板文件
freemarker freemarker freemarker freemarker freemarker freemarker freemarker freemarker