- 浏览: 1197926 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (361)
- java综合 (33)
- 项目管理 (10)
- 工作流 (6)
- spring (11)
- hibenate (17)
- struts (0)
- javascript,html,css,ajax,jquery (11)
- IDE (9)
- 生活 (0)
- 工作 (0)
- 杂记 (1)
- 数据库 (96)
- 服务器 (5)
- 可视编辑 (0)
- freemarker (6)
- 操作系统 windows (13)
- web页面 (6)
- jms (15)
- 调优 (4)
- 测试和bug管理 (2)
- 原理 (1)
- 項目-atf (17)
- 安全 (3)
- xml (4)
- 操作系统 liunx (21)
- 网络 (22)
- office (11)
- 设计 (2)
- 软件 (1)
- 数据库 mysql (6)
- 胖客户端-flex (1)
- 正则 (9)
- oracle- liunx (3)
- sql2000 (2)
- 模式 (1)
- 虚拟机 (2)
- jstl (2)
- 版本控制 打包工具 (0)
- AOP (1)
- demo (1)
- 小软件 (2)
- 感恩 (1)
- iphone 4 (1)
- 反欺诈业务经验整理 (0)
最新评论
-
sea0108:
mark
java内存模型 -
XingShiYiShi:
方便把:testPNR();具体实现发出来吗?谢谢
用正则表达式解析 航信的电子客票和pnr报文 -
wh359126613:
如果js和webservice不在同一个服务器上,有跨域问题如 ...
使用javascript调用webservice示例 -
雨飛雁舞:
...
oracle 动态性能(V$)视图 -
ouyang1224:
好东西
oracle 动态性能(V$)视图
随着J2EE进入5.0时代后,Java EE5.0的很多特性也被广泛应用在J2EE程序中。而Java EE5.0的注释(Annotations)特性就是其中应用最广泛的特性之一。
如果稍微浏览一下最新的Java EE5.0(EJB3.0,JPA)的标准规范,就可以发现,这些规范的制定者或是支持者们宣称最多的莫过于,利用这些规范可使开发变得像开发POJOs一样的简单与简洁。但是,如果对那些源代码稍加浏览或查看,最引人注目的可能就是那些取代了XML描述作用的注释。那么,笔者们禁不住要问一句,注释的使用真的可以简化复杂的J2EE或组件的开发吗?
一、 引言
在以前的J2EE版本中,都是使用大量的配置文件来设置Web程序、EJB等。但这一切在Java EE5.0中得到了彻底的改善。Java EE5.0中的注释(Annotation)是专门针对Web和EJB程序而设计的。如@Resource、 @EJB和@WebServiceRef等,以及其它一些与安全相关的注释,如@RunAs和@DeclareRoles。
在Java EE5.0中,这种对元数据(Meta-data)的支持的数据就是注释。通过使用注释, 程序开发人员可以在不改变原有逻辑的情况下,在源文件嵌入一些补充的信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。举个例子,例如希望某个方法的参数或者返回值不为空,虽然可以在Java doc中进行说明,但是表达同样意思的作法有很多,比如“The return value should not be null”或者“null is not allowed here”。测试工具很难根据这些语言来分析出程序员所期望的前提条件(Pre-condition)和执行后的条件(Post-condition)。而使用注释(Annotation),这个问题就可以轻而易举的解决。
注释,简单的说,就是代码里的标记,这些标记可以在类加载、运行时或是编译的时候可以被解释。这给人的感觉极像C++的macros。
其实说起注解语法,对于任何一个Java开发人员来说都已经耳熟能详了,我们每天都在使用着 的@author、 @param等等,其实都是在编写注释,然后用Javadoc生成文档。Java的这种方便的文档生成方法受到了开发者的普遍赞誉。而从JDK1.5开始,注释语法提供了更为强大的功能。
二、 注释——真的能简化吗?
笔者问过一些做Java开发的朋友关于对注释的了解情况。很多都说,在实际的项目当中,依然在使用Java1.4及EJB2.0,因为还没有到不得不使用注释的时候。当然,在平时的学习当中,可能会有涉及到注释。
注释是代码文件中的伪代码,而代码之外的一些配置文件,如XML及*.properties,感觉更加容易从编译过的部署类里具体化。这两者可能各有优点,那我们普通的开发人员依据什么来决定,到底是把元数据写在源文件代码里,还是写在单独的配置文件中呢?
有一点可以肯定,其它能像Java这样提供注释功能的语言并不多。引入注释的目的无非就是想把一些需要单独或是额外解决的问题,引用于源文件中一并解决,但这并不一定能起到药到病除的效果。
让我们看看使用注释在类文件中写入配置信息的情况:这意味着需要重新编译才能反映配置信息的改变,配置不能在Java程序外面单独的加以操作与配置。同时,对于使用那些支持注释及非注释两种类型的框架,无疑会使项目的配置更加混乱,增加维护难度。
如果一个软件在试运行或是真正使用时,碰到用户需求变化或者原来功能不能正常运行,如果一些基本的配置信息都写进Java源文件中,一般的作法是:需求反馈到该程序设计程序员,程序员修改代码,再进行测试,可能测试不通过,影响其他功能了,再测试,折腾很长时间,最后编译打包,交付客户。
如果使用XML和Java分离方式:水平较低的维修人员赶到现场,修改一下配置XML,无须编译Java代码,测试,马上解决问题。很明显哪个更快呢?
所以,开发软件不能只顾自己开发时方便,还要考虑到运行维护时是否方便,软件不像冰箱,制作好交给用户,很坚固,很稳定,用户也不会提出什么修改意见,当然海尔的定制化冰箱有这个意思,但是这种水平不是一般厂商水平能够做出来的。
当然,笔者并不反对或是拒绝任何可以提高软件开发效率及节约时间的方法或技术,但这有个前提,就是这种技术或方法的成本或是代价。有些人会说,将一些部署逻辑或是信息嵌入在代码中,这样可以减少文件的间接访问,增加代码的集中度。但是,在一个满是注释的源文件中,去提取特定的配置注释,这无疑会增加代码的分析时间。此外,笔者们又如何给那些没有源文件的类文件进行注释呢?最后,注释又为何要整一套自己的新语法?它本来就像Java语法,那有必要另起炉灶,再整一套自己的语法吗?
当然,笔者也承认,注释有它肯定的一面,并且可以肯定,其初衷是好的。但笔者认为,在EJB3.0规范中,其注释的规范有些太过极端了。因为很明显,这已经违背了软件的简易性原则,增加了开发的复杂性,使代码的可维护性降低了。
三、 注释——使J2EE开发变得容易一些
我们知道,注释其实也是一种修饰符,在可以使用其它修饰符(比如public,static,或 final)的任何地方都可以使用注释。按规定,注释优先于其它修饰符。它包括一个@符号,@后接注释类型和被括号括起来的元素值对。这些值必须是编译时常量。也就是说 Java本身就提高了注释信息的详细列表。注释并不直接影响程序的语义,但它影响工具和库处理程序的方式,从而对运行程序的语义产生影响。注释可从源文件、class文件中阅读,也会在运行时得到反映。将定义从执行中分离出来并提供一种可以内省约束的方式,这使得执行过程更加灵活。大多数Java开发者已经很熟悉注释了,比如所有的JavaDoc标签和瞬时标签都是注释的例子。
普遍的观点都认为,配置信息最好不要使用注释写在源文件中,因为这样需要每次编译修改过注释的类,最好是将其写成单独的XML等文件。
任何J2EE 开发者都知道开发Java 程序其实并不简单。但新的Java EE 5.0将使你的开发过程变得容易一些。Java EE 5.0具有Web 服务支持、注释和增强的CMP性能。
要开发一个简单的J2EE应用程序,程序员必须要写大量的样本文件代码(如JavaBeans企业版)和设定无数个配置文件(XML中的描述文件)。所以要成为一个J2EE开发者,程序员必须熟悉EJB和XML。对于初学者来说,这些将令他们望而生畏。
目前的J2EE说明书(1.4)非常长,是用较老的JDK 1.2版本写的,这使J2EE更加复杂难懂。新的JDK版本提供了丰富的、简单好用的性能,比如Java EE 5.0的一般性能和注释支持。
而最新的Java EE 5.0,其中一个主要目的就是,既保持J2EE强大的功能,又可以使一般的开发任务变得容易一些。为了达到这个目的,Java EE 5.0将提供更好的默认性态和设置,允许大多数容器无需使用部署描述符就可以得到需要的东西。为此,Java EE 5.0做了很多注释。开发者不需要知道执行的细节(由容器完成执行任务)。这些新性能都使企业的Java应用程序更小、更快。
四、 注释——有所为,有所不为
注释作为元数据的保存或是持有是很实用的。例如,在构建一个实体类或是控制器时变得很方便。同时,在两个不同类之间进行关联时也很有用。
但是,如果把注释作为配置目的来使用,则有违它最初的设计初衷。因为配置文件或信息是经常需要修改的,例如数据库的映射文件等,在这方面使用注释,显然有滥用或过分使用的成分。因此,在这方面,Java EE5.0及Hibernae走得有点偏了,这常常使得注释在元数据与配置文件之间混用。
但是,这并不能说注释是有问题的,只能说是使用者误用问题造成的。注释比较适合用于元数据的定义或保存。但并不适用于应用运行的配置信息。
此外,注释另外一个很成功的应用可能就是在JUnit4 API里的应用。如:
增加一个@Test注释,而不需要像以前那样写成testXxx();
增加一个@Test注释,就可以替代以前的try/catch出错处理了;
增加一个@Before@After注释,可以替换以前的setUp()等方法;
增加一个@RunWith(Parameterized.class)及一个方法@Parameters public static Collection parameters(),被测试类的构造参数都保存在Object[]里。这样就进行参数化的测试了,而无须像从前那样public static Test suite()。
据笔者所知,JUnit框架中注释的使用,的确使它变成更加的灵活,代码更加的紧凑。
其实,注释只是我们普通开发人员手里的一个工具,它也许是一个新玩意,带有几分的新鲜,但也有几分的讨厌,其实也是一把双刃剑。笔者记得当初学习设计模式的时候,就想把所有的这些模式赶快应用到开发当中,不管适用不适用。只有当这种新鲜感过后,才能正常与正确的使用这些新特性。
五、 小结
那注释到底用还是不用呢?笔者认为,把注释应用到有意义的地方,而不是一味的滥用即可。例如,在那些没有注释就不能运行的地方肯定需要就注释。再如,改变注释将可能导致运行时类的行为,那可以考虑使用注释。
Java EE5.0使用注释这样新语法,替代XML,当然,修改元注释还是需要重新编译的,这和修改源码没有两样,但是如果没有单元测试这一人工工程管理跟上,程序上线正式运行,因为粗心等各种琐碎问题全部爆发,更是可怕。
另外,笔者认为,ROR中的约定优于配置(Convention Over Configuration ),这种做法Java的框架可以借鉴一下,在前期把问题都解决,这总比到了维护实施后期左找右改XML要强吧,牺牲了灵活性得到的却是可靠和稳定。使用ROR这样的解释语言,对于注释的修改是不需要编译,当然约定优于配置不是ROR首先提出来,默认简单,容易上手,需要细节还是可以使用XML配置。总之,约定优于配置是基于XML基础上的改进。当然,笔者不反对探索简化,但是目前探索结果还是发现,XML比较稳定,符合分离OO思想,能够健壮地对付扩展和维护。
发表评论
-
介绍Java GC种类,并更换 调优GC
2011-03-04 03:42 2166转载自:http://blog.csdn.net/rola ... -
Daemonthread(守护线程)的含义
2011-03-03 20:39 1943http://fruitking.iteye.com/blog ... -
smc_5_1_0小例子
2010-06-25 15:33 0smc_5_1_0小例子 -
Hessian 例子
2010-06-25 15:27 0Hessian 例子 -
java小日历带农历(转)
2010-06-20 15:55 1513http://zengming526.iteye.com/bl ... -
Annotation exmaple
2009-12-14 09:44 1112如何使用注解的小例子 -
Java6 WebService @WebService
2009-12-11 10:39 43541. 新建一个JAVA project.2. 新建一个He ... -
JNI 数据类型转换
2009-11-18 12:01 21223Java代码 #include <jni ... -
JNI 返回结构体参数
2009-11-18 11:58 8891如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对Jn ... -
Map 四种同步方式的性能比较
2009-11-01 21:03 2000如果需要使 Map 线程安全,大致有这么四种方法: 1、使用 ... -
ConcurrentHashMap之实现细节
2009-11-01 21:00 2841ConcurrentHashMap是Java 5中支持高并发、 ... -
Java反射经典实例
2009-09-28 16:30 2024Java提供了一套机制来动态执行方法和构造方法,以及数组操作等 ... -
servlet 线程 安全 threadlocal (基础知识了)
2009-09-15 13:05 3251关键字: j2ee servlet 线程 ... -
java toString() ReflectionToStringBuilder
2009-06-18 11:31 2119@Override public String toStrin ... -
解决JAVA服务器性能问题
2009-04-13 01:51 2861解决JAVA服务器性能问题 ... -
java内存模型
2009-04-12 23:10 5659Weblogic系统管理总结(7.1/8.0)关于JVM内存管 ... -
Java线程总结
2009-04-12 20:32 1174在论坛上面常常看到初 ... -
删除字符串中的空格或将字符串的多个空格换位单个空格
2009-04-10 15:44 2503//将字符串的多个空格换位单个空格 public static ... -
Java 中文于unicode 互转
2009-04-06 03:08 3252关键字: java unicode convert 转换 ... -
Java EE 6体系结构的变革
2009-03-27 17:54 1502又看到 Reza 同学为 Java EE 6 奔走呼告了。如同 ...
相关推荐
标题"java-annotations"直接指出了我们讨论的主题——Java注释。这个主题涵盖了如何使用注释来增强代码的可读性、实现编译时或运行时的代码自省、以及利用注解驱动的开发模式。基于JVM的语言如Kotlin、Groovy等也...
GraphQL-Java批注 是一个很棒的库,但是它的语法有点冗长。... compile " io.github.graphql-java:graphql-java-annotations:8.3 " } (Maven语法) < groupId> io . github . graphql - java
标题 "allure-java-annotations-1.4.0.RC2.zip" 提供的信息表明,这是一个与Allure报告相关的Java库的版本。Allure是一个强大的、灵活的测试报告工具,它提供美观的界面来展示测试结果,帮助开发者和测试人员更好地...
总的来说,J2EE JAR包见证了Java在企业级应用开发领域的不断演进,从J2EE 1.3的初步成熟到1.4的完善,再到5.0的显著简化,它们反映了软件开发趋势的变化,即从繁重的手动配置转向更简洁、更具生产力的开发方式。...
J2EE 1.5 API文档是Java企业版(Java Enterprise Edition)开发人员的重要参考资料,它详细介绍了J2EE 1.5版本中的各种组件、接口、类和方法,为开发者提供了全面的API规范和技术指导。在J2EE 1.5中,主要包含了以下...
J2EE的核心包括Servlets、JSP(JavaServer Pages)、EJB(Enterprise JavaBeans)、JMS(Java Message Service)以及JTA(Java Transaction API)等技术,这些技术为开发者提供了构建可扩展、高度模块化和高可用性的...
开发工具 jackson-annotations-2.8.6开发工具 jackson-annotations-2.8.6开发工具 jackson-annotations-2.8.6开发工具 jackson-annotations-2.8.6开发工具 jackson-annotations-2.8.6开发工具 jackson-annotations-...
Java API 1.5 和 J2EE 5.0 是两个重要的Java开发平台版本,对于理解和掌握Java编程以及企业级应用开发至关重要。这两个版本引入了许多新特性,优化了已有功能,提升了开发效率。 **Java API 1.5 (Java SE 5.0)** ...
《J2EE开发使用手册源码》是一份深入解析J2EE应用开发的宝贵资源,主要针对的是Java企业级开发人员。J2EE(Java 2 Platform, Enterprise Edition)是Oracle公司推出的用于构建分布式、多层的企业级应用程序的平台,...
以上就是Java 5.0中关于注释以及其他相关特性的详细解释,这些改进不仅提高了代码的可读性和维护性,也增强了Java作为企业级开发语言的能力。对于开发者来说,理解并熟练掌握这些特性是非常重要的,因为它们已经成为...
Java 注释编码的知识点涵盖了Java注解(Annotations)的基本概念、语法、使用场景以及与Java SE 8的变化。注解是Java SE 5引入的一个特性,用于为Java代码提供元数据。这些元数据可以被编译器读取,也可以用于运行时...
在探讨"C ++注释C++ Annotations"这一主题之前,我们首先需要明确几个基本概念:C++作为一种高级编程语言,它不仅继承了C语言的强大功能,还在此基础上进行了大量的改进和扩展,使其成为一种更为强大、灵活且易于...
赠送jar包:audience-annotations-0.5.0.jar; 赠送原API文档:audience-annotations-0.5.0-javadoc.jar...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
annotations-java8.jar;annotations-java8.jar;annotations-java8.jar
J2EE(Java Platform, Enterprise Edition)是Java技术在企业级应用开发中的核心框架,它提供了一系列的组件和服务,用于构建可扩展、跨平台、分布式的企业级应用程序。J2EE 5是其第五个主要版本,发布于2006年,...
Java EE(以前称为J2EE)是Java平台上用于构建企业级分布式应用程序的框架。它提供了一个标准的、组件化的开发模型,支持多层架构,包括客户端、Web服务器、应用服务器和数据库。Java EE 5.0是这个平台的一个重要...
JPA是J2EE 5.0中的数据持久化标准,它提供了一种在Java应用中管理和操作关系数据库的统一接口。通过使用`@Entity`注解定义数据模型类,`@Table`指定数据库表,`@Id`标识主键,开发者可以轻松地实现对象关系映射(ORM...
- **EJB**:EJB分为三种类型:会话bean(Session Beans)负责业务逻辑,实体bean(Entity Beans)代表持久化对象,消息驱动bean(Message-Driven Beans)处理JMS(Java Message Service)消息。 - **JMS**:提供异步...
"Laravel开发-laravel-annotations"可能是一个项目或者教程,旨在探讨如何在Laravel中有效地利用注释来增强应用的可维护性和功能性。Laravel本身并不直接支持注释驱动的开发,但可以通过第三方库或自定义解析器来...
4. **Persistence API (JPA)**:Java Persistence API首次在J2EE5.0中引入,提供了一种标准的方式来处理对象关系映射(ORM),使得Java对象可以直接与数据库交互,极大地简化了数据访问层的开发。 5. **WS-* ...