学习教程:Java Annotation 高级应用

2008-02-23 08:01:28来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  前言:

  前不久在matrix上先后发表了《java annotation 入门》、《java annotation 手册》两篇文章,比较全面的对java annotation的语法、原理、使用三方面进行了阐述。由于《入门》中的简单例程虽然简单明了的说明了annotation用法,但给大家的感觉可能是意犹未见,所以在此行文《java annotation高级应用》,具体实例化解释annotation和annotation processing tool(APT)的使用。望能对各位的有所帮助。

  一、摘要:

  《java annotation高级应用》具体实例化解释annotation和annotation processing tool(APT)的使用。望能对各位的有所帮助。本文列举了用于演示annotation的BRFW演示框架、演示APT的apt代码实例,并对其进行较为深度的分析,希望大家多多提意见。

  二、annotation实例分析

  1.BRFW(Beaninfo Runtime FrameWork)定义:

  本人编写的一个annotation功能演示框架。顾名思义,BRFW就是在运行时取得bean信息的框架。

  2.BRFW的功能:

  A.源代码级annotation:在bean的源代码中使用annotation定义bean的信息;

  B.运行时获取bean数据:在运行时分析bean class中的annotation,并将当前bean class中field信息取出,功能类似xdoclet;

  C.运行时bean数据的xml绑定:将获得的bean数据构造为xml文件格式展现。熟悉j2ee的朋友知道,这个功能类似jaxb.

  3.BRFW框架:

  BRFW主要包含以下几个类:

  A.Persistent类:定义了用于修饰类的固有类型成员变量的annotation.

  B.Exportable类:定义了用于修饰Class的类型的annotation.

  C.ExportToXml类:核心类,用于完成BRFW的主要功能:将具有Exportable Annotation的bean对象转换为xml格式文本。

  D.AddressForTest类:被A和B修饰过的用于测试目的的地址bean类。其中包含了地址定义所必需的信息:国家、省级、城市、街道、门牌等。

  E.AddressListForTest类:被A和B修饰过的友人通讯录bean类。其中包含了通讯录所必备的信息:友人姓名、年龄、电话、住址(成员为AddressForTest类型的ArrayList)、备注。需要说明的是电话这个bean成员变量是由字符串类型组成的ArrayList类型。由于朋友的住址可能不唯一,故这里的住址为由AddressForTest类型组成的ArrayList.

  从上面的列表中,可以发现A、B用于修饰bean类和其类成员;C主要用于取出bean类的数据并将其作xml绑定,代码中使用了E作为测试类;E中可能包含着多个D.

  在了解了这个简单框架后,我们来看一下BRFW的代码吧!

  4.BRFW源代码分析:

  A.Persistent类:

  清单1:

package com.bjinfotech.practice.annotation.runtimeframework;

import java.lang.annotation.*;

/**
* 用于修饰类的固有类型成员变量的annotation
* @author cleverpig
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Persistent {
String value() default "";
}

  B.Exportable类:

  清单2:

  package com.bjinfotech.practice.annotation.runtimeframework;

import java.lang.annotation.*;

/**
* 用于修饰类的类型的annotation
* @author cleverpig
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Exportable {
//名称
String name() default "";
//描述
String description() default "";
//省略name和description后,用来保存name值
String value() default "";

}
  C.AddressForTest类:

  清单3:

package com.bjinfotech.practice.annotation.runtimeframework;

/**
* 用于测试的地址类
* @author cleverpig
*
*/
@Exportable("address")
public class AddressForTest {
//国家
@Persistent
private String country=null;

//省级
@Persistent
private String province=null;

//城市
@Persistent
private String city=null;

//街道
@Persistent
private String street=null;

//门牌
@Persistent
private String doorplate=null;

public AddressForTest(String country,String province,
String city,String street,String doorplate){
this.country=country;
this.province=province;
this.city=city;
this.street=street;
this.doorplate=doorplate;
}

}

  D.AddressListForTest类:

  清单4:

  package com.bjinfotech.practice.annotation.runtimeframework;

import java.util.*;

/**
* 友人通讯录
* 包含:姓名、年龄、电话、住址(多个)、备注
* @author cleverpig
*
*/
@Exportable(name="addresslist",description="address list")
public class AddressListForTest {
//友人姓名
@Persistent
private String friendName=null;

//友人年龄
@Persistent
private int age=0;

//友人电话
@Persistent
private ArrayList telephone=null;

//友人住址:家庭、单位
@Persistent
private ArrayList AddressForText=null;

//备注

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:两种特殊的Java容器类List和Set分析

下一篇:关于Hibernate编程的特点与思考