在JDK5.0中新增加了特性Annotation,可谓为后来JavaEE架构带来了不少技术性变革
各种annotated风格的架构如雨后春笋一般涌现出来,EJB3.0, Junit4, SpringMVC 3.X 以及后来的Servlet3.0规范都迫不及待地支持annotation
到底annotation有多大魔力呢?
一、annotationVSxml
有人说annotation用作配置比xml更好,其有一定道理又并非完全如此,annotation和xml在配置领域相辅相成,各自扮演自己的角色
我认为一般的配置可以分为两类:
第一类为开发级别配置,这些配置是方便开发有条不稳的进行,不错乱,这些配置在系统上线运行之后不会再更改,如果需要更改则说明系统功能变更,那么代码必然也要变更,比如struts里面的哪个action映射到哪个视图,那个视图存放在哪个路径下等等。
第二类为运行时配置,比如服务器地址,依赖注入的bean等,运行维护者可能需要更改的。
用annotation作配置的好处就是能让配置尽可能地接近与配置相关的代码,这样就不需要翻阅冗长的XML文件去查询哪个action映射到哪个视图,能提高开发时的查询效率,但是annotation固化在代码里,运行时不能更改,所以适合第一类配置。
XML则有树形结构和运行时可更改的特性,更适合第二类配置。
所以annotation和xml是绝对应该并存的,不存在谁取代谁的关系。
二、annotation让和架构耦合的类退化为POJO
相比较第一个理由,第二个理由是我更喜欢的,我常用一个比喻“注解就像绿色食品,如果你需要就用,如果不需要就全当什么都没有”,用注解注释的类再也不需要实现任何接口来标注其有哪些特定的能力,这样这个类完全成为POJO,而可以在没有接口的环境中独立运行,更多的时候,这种环境指的是本地单元测试,它让controller或者servlet从很难做单元测试发展到和测试其他的domain object没有什么本质区别,有效提升代码测试覆盖率。