xml 和 Java Annotation 的优缺点对比

  《Java Annotation 基础》中我们简单地介绍了 Java Annotation 的作用以及 Java 标准的 Annotation 。今天我们来了解一下 xml 和 Annotation 各自作为配置项的优缺点。

  首先说说 xml 。目前 web 应用中几乎都使用 xml 作为配置项,例如我们常用的框架 Struts、Spring、Hibernate、IBatis 等等都采用 xml 作为配置。xml 之所以这么流行,是因为它的很多优点是其它技术的配置所无法替代的。
  1、xml 作为可扩展标记语言最大的优势在于开发者能够为软件量身定制适用的标记,使代码更加通俗易懂。
  2、利用 xml 配置能使软件更具扩展性。例如 Spring 将 class 间的依赖配置在 xml 中,最大限度地提升应用的可扩展性。
  3、具有成熟的验证机制确保程序正确性。利用 Schema 或 DTD 可以对 xml 的正确性进行验证,避免了非法的配置导致应用程序出错。
  4、修改配置而无需变动现有程序。

Continue Reading »

10-03-03 | 编程开发 | Permalink | No Comments |

java Annotation 基础

  配置文件的好处在于进一步降低耦合,使应用更易于扩展,即使对配置文件进行了修改也不需要对工程进行修改和重新编译。缺点也是显而易见,配置文件读取和解析需要花费一定的时间,配置文件过多时难以管理,IDE 无法对配置的正确性进行校验,给测试增加了难度。基于以上原因,Java 从1.5开始提供了 Annotation (注释,标注),它用来修饰应用程序的元素(类,方法,属性,参数,本地变量,包、元数据),编译器将其与元数据一同存储在 class 文件中,运行期间通过 Java 的反射来处理对其修饰元素的访问。Annotation 仅仅用来修饰元素,而不能影响代码的执行。只有通过其配套的框架或工具才能对其信息进行访问和处理。这一点与 xml 相同,没有 struts api 的 struts.xml 文件对程序不会起来任何作用。

  Q:如何使用 Annotation ?
  A:首先让我们从 Java 定义的 Annotation 开始。@Override 可能是我们最常用到的 Annotation 之一了,Eclipse 中当子类中的某个方法覆写的父类中的方法时,会亮黄灯提示。若用 @Override 修饰该方法,黄灯熄灭。再让我们来看一个例子,当我们使用 new java.util.Date(2010, 2, 25); 来初始化日期类时,Eclipse 仍然会亮黄灯提示,这是因为该方法被 @Deprecated 修饰了,表示不推荐使用。从这两个例子我们能够了解到,Annotation 是在编译期校验的。这一点最大的好处是在编译期间就可对错误进行处理。若使用 xml 的话,只有在运行期才能得到错误信息。
Continue Reading »

10-02-25 | 编程开发 | Permalink | No Comments |

用 Schema 验证 xml

在过去我们用 DTD 来定义 XML 文档的和法性,而现在可以利用 XML Schema (XML Schema Definition,XSD)来替代 DTD。同 DTD 相同,XML Schema 描述了 XML 文档的结构,既然如此,那么我们为什么要选择 XML Schema 而不是 DTD 呢?

1、XML Schema 可针对未来的需求进行扩展,DTD 不易扩展。
2、XML Schema 更完善,功能更强大。
3、XML Schema 基于 XML 编写,一个 XML Schema 也是一个 XML 文件。DTD 不遵循 XML 语法,这表示你不得不多去学习另外一门语言。
4、XML Schema 支持数据类型,内置多种数据类型。DTD 数据类型有限。
5、XML Schema 支持命名空间,DTD 不支持命名空间。
6、XML Schema 在 2001年5月2日成为 W3C 标准。

最近正在将 Grapevine 升级至第2代版本 ,将全 xml 配置转为 Annotation + xml 的方式。如此一来,将大大简化 xml 文件的配置,提高生产效率。我们来看看 Grapevine2 中最基础的 xml 配置是如何利用 XML Schema 进行验证的。
Continue Reading »

09-12-20 | 编程开发 | Permalink | No Comments |

宝贝生日快乐

去年的今天,对我们一家人来说都是最难忘最具有意义的一天,经过近10个月的孕育,宝贝终于来到了我们的身边。一年后的今天,宝贝已经学会走路,学会叫爸爸妈妈了。正是有了宝贝,才让我感受到为人父母的辛酸和甜蜜,才让我懂得了做父亲的责任和幸福。

宝贝,祝你永远健康、幸福、快乐。爸爸妈妈永远爱你。

09-12-04 | 流水账 | Permalink | No Comments |

换了HTC Touch Pro

以前买机器,总要在几个大品牌之间进行反复比较,而这次品牌基本上只考虑 HTC 的,原因很简单,windows mobile 操作系统。智能机出来没有多久,就买了摩托罗拉A780,linux 操作系统。当时对智能机没有认识,所以买了行货,要命的是居然买了个移动定制机,很多软件装不上,一气之下把系统刷了,也开始了解智能机。接下来就是我的 n70 了,Symbian 操作系统。机器相当稳定,运行速度也不错,软件丰富,安装了搜狗输入法后,打字速度超快。但是有一个致命伤,就是在接通电话后,很容易产生静电,导致断 线,屏幕上显示“444”。因为这个问题,我不得不打过去跟人家解释,很是尴尬。后来在网上查了很多相当资料,说是 n70 的通病(后来的版本似乎没有这个问题)。手机的三大操作系统玩了两个了,就差 windows mobile 了,而 HTC 已经做了多年了 windows mobile ,已经相当成熟,所以它就是我的不二选择了。本来想买凯撒的,但是由于年份较老,市面上机器基本上都是翻新机了,想找个十四天机都找不到了。于是在查阅了 各种资料,泡了n多 HTC 论坛后,选择了 Touch Pro 。也许有人会问,为什么不选择 Touch Pro 2 ?银子啊!

这篇文章本应该当天就发的,但是自己对 Touch Pro 的了解都来源于网络,并没有亲身体会,所以无法对其进行评价。经过一个多月的使用,总结了一些优缺点供大家参考。
Continue Reading »

09-12-02 | BLOG相关 | Permalink | No Comments |

Mayaa不错的表示层框架

在日本Mayaa很流行,也许是因为是日本人写的框架,总之现在很多日本的项目都用这个框架。

Mayaa处于 web 体系的表示层,主要是将后台数据交给 html 显示。Mayaa的思路很不错,它的重点在于使得 html 更加单纯,将逻辑和设计进一步分离。即使程序已经写好,页面设计人员也可以很容易地对页面进行重构且不会影响到程序的正确性。开发人员也可以更清晰地对程 序进行修改和变更。为了做到这一点,Mayaa 的做法是为每个 .html 文件配置一个 .mayaa 文件,当访问该 .html 文件时,解析对应的 .mayaa 文件并将结果交给 html ,最终做为 response 输出到客户端。那么如何取出后台数据,又该怎么将数据交给 html 呢?看两段代码:

html 文件:<div m:id=”test” id=”test”/>

mayaa 文件:<m:write m:id=”test” value=”${test}” />

为 html 的项目追加 m:id 属性,在相应的 mayaa 文件中追加相同 m:id 的标签m:write 标签。这样一来,这两个文件的同一 m:id 的项目就绑定了,系统运行时,就会将 m:write 标签的 value交给绑定的 html 项目了。
Continue Reading »

09-11-27 | 编程开发 | Permalink | No Comments |

希望这是最后一次

已经记不起是第几次写这篇文章了,每次都是无奈的,每次也会在结尾的地方写上“希望这是最后一次”。而每次过后又不得不重新开始寻找稳定的地方。

最早写 blog 是从 2004 年,由于工作需要,经常会在网站查找一些资料。无意中找到了 竹笋炒肉 的网站,当时并不知道是 blog ,只是觉得拥有这样一个个人网站也不错。从此开始在网站寻找这方面的服务,于是就找到了这些服务商:blogdirver、doNews、CSDN、阳光博客、和讯博客、javaresearch、blogjava …… 也在这些 blog 网站上踏上了自己的足迹。最然免费的午餐大家都想吃,但免费的东西吃起来似乎并不容易。因为这些 blog 服务商能交给用户自主的权限实在太少,很多需求无法满足。为了能使 blog 做的更象回事,于是购买了虚拟空间和域名架设起自己的网站。网站程序也用过不少,最早用过的 asp blog 程序 应该是 Z-Blog 和PJBlog 了。到后来改成了流行的 php 程序 sablog、bo-blog、wordpress。自从2006年底开始使用 wordpress 以来,就再也没有更换过程序。说起来,也算是 wordpress 的粉丝了。
Continue Reading »

09-11-26 | BLOG相关 | Permalink | No Comments |

Grape 开发日志 – 2

  昨天追加了一些功能,经过测试发现了几个问题,今天对其进行了修正。

1、对自定义树节点图标的改进。

  问题:自定义树节点图标是用文件选择框(JFileChooser)实现的。但是 Swing 的 JFileChooser
是不支持图片预览的,这样使用起来非常不方便。

  改进:在文件选择框右侧追加了图片预览框。当选中某个图片时,该框会显示出图片。

2、修正了点击弹出的密码输入框的“取消”按钮后文章依然被打开的 bug。

3、修正了可修改有密码文章标题的 bug。

09-10-14 | 什么是GRAPE | Permalink | No Comments |

Grape 开发日志 – 1

今天比较空闲,把 Grape 做了一点修改。

1、修改了几个 bug :

a、修复了更换皮肤导致所有打开的文章变为修改状态。

b、修复了设置文章为“只读”后,状态栏没有改变。

2、修改并追加了几个小功能:

a、密码输入框改为了 JPasswordField。

b、追加了文章密码设置。

c、查找对话框显示时,将选择的文字做为要查找的对象。

d、自定义节点(文章)图标。
Continue Reading »

09-10-13 | 什么是GRAPE | Permalink | No Comments |

Grape 应用及源码提供下载

接下来的时间又要开始忙了,估计这个程序一时半会做不完了。干脆把目前的成果先放出来,大家可以看看。

本程序分为两部分,Grapevine 和 Grape。Grapevine 是一个 Swing 开发框架,写的比较粗,没时间细写。实现了 OR/M、IOC、Interseptor 等功能,有兴趣的朋友可以了解一下。Grape 是建立在 Grapevine 上的一个知识管理的应用,实现了多文件、多文档编辑、发布日志到 WordPress 等功能。还是没时间,设置基本上都还没时间写,发布日志也比较简化,有时间再好好修改。

config目录下的classes.xml是类的配置文件,所有的对象都是由 Grapevine 生成并注射到程序中去的。包括画面、菜单、事件处理等等。Grapevine.jar 在 lib 目录下。

要运行程序,需要安装 jdk 6,否则程序将无法运行,切记。

程序基本上可以完成基础需求了,不过还没有测试过,可能有很多Bug。我在使用中也遇到了几个小Bug。

本次不是发布,只是接下来没有时间写了,所以把半成品给大家预览一下。目前源代码还没有整理过,注释也乱七八糟的,比较乱,有些地方也不是很合理,还需要调整,有想要学习或正在开发相同应用的朋友可以参考一下。

应用:Grape

源码:Grape Grapevine WordEditor

09-09-20 | 什么是GRAPE | Permalink | 3 Comments |