如何使用annotation替代配置文件,分析其优确点

守护欢笑 2010-10-12 12:19:26
如何使用annotation替代配置文件,分析其优确点,请举例子说明谢谢
...全文
141 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
解未知数 2010-10-12
Annotation之后阅读代码稍微好点, 有些时候比xml简洁一点
回复
wwwtyb 2010-10-12
首先说说 xml 。目前 web 应用中几乎都使用 xml 作为配置项,例如我们常用的框架 Struts、Spring、Hibernate、IBatis 等等都采用 xml 作为配置。xml 之所以这么流行,是因为它的很多优点是其它技术的配置所无法替代的。
  1、xml 作为可扩展标记语言最大的优势在于开发者能够为软件量身定制适用的标记,使代码更加通俗易懂。
  2、利用 xml 配置能使软件更具扩展性。例如 Spring 将 class 间的依赖配置在 xml 中,最大限度地提升应用的可扩展性。
  3、具有成熟的验证机制确保程序正确性。利用 Schema 或 DTD 可以对 xml 的正确性进行验证,避免了非法的配置导致应用程序出错。
  4、修改配置而无需变动现有程序。

  虽然有如此多的好处,但毕竟没有什么万能的东西,xml 也有自身的缺点。
  1、需要解析工具或类库的支持。
  2、解析 xml 势必会影响应用程序性能,占用系统资源。
  3、配置文件过多导致管理变得困难。
  4、编译期无法对其配置项的正确性进行验证,或要查错只能在运行期。
  5、IDE 无法验证配置项的正确性无能为力。
  6、查错变得困难。往往配置的一个手误导致莫名其妙的错误。
  7、开发人员不得不同时维护代码和配置文件,开发效率变得低下。
  8、配置项与代码间存在潜规则。改变了任何一方都有可能影响另外一方。

  让我们来看看 Annotation 的优点。
  1、保存在 class 文件中,降低维护成本。
  2、无需工具支持,无需解析。
  3、编译期即可验证正确性,查错变得容易。
  4、提升开发效率。

  同样 Annotation 也不是万能的,它也有很多缺点。
  1、若要对配置项进行修改,不得不修改 Java 文件,重新编译打包应用。
  2、配置项编码在 Java 文件中,可扩展性差。

  总结:没有一个事物是万能的,同样 xml 和 Java Annotation 都有各自的优缺点。通过以上对比,细心的读者可能已经发现它们的优缺点恰恰是互补的。xml 的强项是 Annotation 所不具备的,而 Annotation 的优势也是 xml 所欠缺的。这也正是时下流行的 xml + Annotation 配置的原因所在。在下一篇日志中,我们将使用 xml 和 Annotation 以及 xml + Annotation 各自完成简单的对象注射功能,使读者更加深入地了解 xml 和 Annotation 的作用。
回复
loveunittesting 2010-10-12
基本上需要改动的地方用xml,比如数据源的配置;配置正确后就不需要修改的用注解,比如事务控制的注解、hibernate实体类配置。还有别人的实现类也只能用配置文件,比如spring给的实现。
回复
2399 2010-10-12
很多人认为用annotation会比xml简单,开发快,我觉得也没怎么简单到哪里吧,不过确实有点就是能少很多xml配置文件,其实xml有人会觉得比较难写,但是真正实际开发的时候,这些都不是难点,直接copy然后改点地方,例如包名,类名什么的就ok了。开发过程中最难的最烦人的还是感觉页面比较麻烦。还有一点annotation会比较难维护,但是一个项目维护是占很大地位的。并且现在的xml配置文件,现在都还是习惯先设计表,然后设计类什么的,很多IDE都能自动生成xml配置文件,你改下生成的地方就可以了。至于现在annotation用得多还是xml用得多,我就没调查过,但是我们公司都是用的xml配置。
你希望要什么例子呢?
不过有一点,测试的时候用annotation会简单很多,所以学习下annotation还是有用的,至于以后会向哪个方向发展我们还是静待其变吧
回复
liufeng0209 2010-10-12
配置简化,集中,原来在xml中配置,文件多,现在使用annotation配置,更加精练,而且集中,利于修改,减少犯错的可能性.
可读性优于配置文件,当需求变化时,修改的地方少
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2010-10-12 12:19
社区公告
暂无公告