浏览 2435 次
锁定老帖子 主题:annotation初探
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | |||||||||||||||||||
发表时间:2008-03-05
今天研究Annotation分析JavaBean信息,通过在JavaBean中添加的注解来获得信息真是非常方便。 Annotation是在已经发布的JDK1.5(tiger)中增加新的特色。它提供一种机制,将程序的元素如:类,方法,属性,参数,本地变量,包和元数据联系起来。这样编译器可以将元数据存储在Class文件中。这样虚拟机和其它对象可以根据这些元数据来决定如何使用这些程序元素或改变它们的行为。 定义Annotation /** * @(#) Id.java 1.0, 2008-3-5 * Copyright 徐国智. All rights reserved. * QQ:13629995 MSN:xgzcc@hotmail.com * Email:lidxgz@163.com,lidxgz@gmail.com */ package com.xugz.core.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * @author 徐国智 * * @version 1.0,2008-3-5 上午10:45:57 */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface Id { }
/** * @(#) Column.java 1.0, 2008-3-5 * Copyright 徐国智. All rights reserved. * QQ:13629995 MSN:xgzcc@hotmail.com * Email:lidxgz@163.com,lidxgz@gmail.com */ package com.xugz.core.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * @author 徐国智 * * @version 1.0,2008-3-5 上午10:50:42 */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface Column { String name() default ""; }
说明:
在JavaBean上添加注解 /** * @(#) Word.java 1.0, 2008-3-4 * Copyright 2007 徐国智. All rights reserved. * QQ:13629995;MSN:xgzcc@hotmail.com; * Email:lidxgz@163.com */ package com.xugz.bean; import com.xugz.core.annotation.Column; import com.xugz.core.annotation.Id; /** * @author Xugz * * @version 1.0,2008-3-4 */ public class Word { /** *为属性wordId添加注解,指定Id属性和字段名 */ @Id @Column(name="id") private Integer wordId; private String word; private String explain; private String example; private Integer state; private Integer learnCount; private Integer newOrder; /** *getter和setter方法省略 */ }
利用反射机制分析JavaBean /** * @(#) Reflect.java 1.0, 2008-3-5 * Copyright 徐国智. All rights reserved. * QQ:13629995 MSN:xgzcc@hotmail.com * Email:lidxgz@163.com,lidxgz@gmail.com */ package com.xugz.core.reflect; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import com.xugz.core.annotation.Column; import com.xugz.core.annotation.Id; /** * @author 徐国智 * * @version 1.0,2008-3-5 上午10:54:32 */ public class Reflect { private String className; private Class cl; public Reflect(String className) { this.className = className; try { cl = Class.forName(className); } catch (Exception e) { } } public String getId() { try { if (cl != null && !cl.isInstance(Object.class)) { Field[] fields = cl.getDeclaredFields(); for (Field field : fields) { Id id = field.getAnnotation(Id.class); if (id == null) continue; return getColumnName(field.getName()); } } } catch (Exception e) { } return null; } public String getColumnName(String name) { try { if (cl != null && !cl.isInstance(Object.class)) { Field field = cl.getDeclaredField(name); Column column = field.getAnnotation(Column.class); if (column == null) return field.getName(); else return column.name(); } } catch (Exception e) { } return null; } public List<String> getFieldNames(){ List<String> list = new ArrayList<String>(); try { if (cl != null && !cl.isInstance(Object.class)) { Field[] fields = cl.getDeclaredFields(); for(Field field:fields){ Column column = field.getAnnotation(Column.class); if (column == null) list.add(field.getName()); else list.add(column.name()); } return list; } } catch (Exception e) { } return null; } }
测试 /** * @(#) TestAnnotation.java 1.0, 2008-3-5 * Copyright 徐国智. All rights reserved. * QQ:13629995 MSN:xgzcc@hotmail.com * Email:lidxgz@163.com,lidxgz@gmail.com */ package test; import java.util.List; import com.xugz.core.reflect.Reflect; /** * @author 徐国智 * * @version 1.0,2008-3-5 上午11:08:41 */ public class TestAnnotation { /** * @param args */ public static void main(String[] args) { // TODO 自动生成方法存根 Reflect reflect = new Reflect("com.xugz.bean.Word"); System.out.println("id===="+reflect.getId()); List<String> list = reflect.getFieldNames(); for(String name:list){ System.out.println(name); } } }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
||||||||||||||||||||
返回顶楼 | ||||||||||||||||||||