今天研究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);
}
}
}
分享到:
相关推荐
标题 "springmvc初探(annotation)" 暗示了我们将探讨Spring MVC框架的注解驱动编程。Spring MVC是Spring框架的一部分,专门用于构建Web应用程序。它提供了模型-视图-控制器(MVC)架构,使开发者可以更有效地组织和...
赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...
赠送jar包:javax.annotation-api-1.2.jar; 赠送原API文档:javax.annotation-api-1.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-1.2.pom;...
赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...
赠送jar包:javax.annotation-api-1.3.2.jar; 赠送原API文档:javax.annotation-api-1.3.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.3.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-...
7. **元Annotation**:元Annotation是用于定义其他Annotation的Annotation,例如`@Retention`定义Annotation的生命周期(编译时、类加载时或运行时),`@Target`指定Annotation可以应用到哪些程序元素,`@Documented...
@androidx.annotation.NonNull 缺失的兼容、androidx.annotation兼容包
javax.annotation-3.0.jar javax.annotation-3.0.jar javax.annotation-3.0.jar
在iOS开发中,Annotation是苹果地图(MapKit)框架中的一个重要概念,用于在地图上添加可视化标记,以展示特定地理位置的信息。自定义的Annotation则允许开发者根据需求个性化地图上的标注,比如添加图片、自定义...
【Annotation技术】是Java语言中的一个重要特性,引入于JDK5,主要目的是为程序元素(如包、类、方法、变量等)添加元数据,即附加信息,这些信息可以被编译器、IDE工具或者运行时系统使用。Annotation不会直接改变...
Annotation是Java语言中的一种元数据,它提供了在代码中附加信息的能力,这些信息可以在编译时或运行时被解析和使用。Annotation的本质是一种特殊类型的注解,它允许开发者向编译器、JVM或者工具提供关于代码的额外...
在IT行业中,注解(Annotation)是Java编程语言的一个重要特性,它允许程序员在代码中嵌入元数据,提供了一种安全的方法来修饰程序元素,如类、方法、变量等。注解不会直接影响代码的执行,但它们可以被编译器或运行...
### 用Annotation简化Java程序的开发 #### 一、引言 随着软件开发技术的不断发展,特别是Java语言的广泛应用,开发者面临着如何有效地管理和配置代码的问题。传统的做法是使用XML文件来配置程序的各种设置,但这种...
Java annotation 什么是java annotation?annotation 的7种标注类型。nnotation提供了一条与程序元素关联任何信息或者任何元数据(metadata)的途径。从某些方面看,annotation就像修饰符一样被使用,并应用于包、...
javax.annotation.jar
这里面包涵了需要用Hibernate Annotation时,所需要的所有jar包! 现在我们公司在做web项目的时候,已经不用*.hbm.xml这种映射文件了,都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用...
在本例中,我们关注的`jar`包是`javax.annotation.zip`,它包含了`javax.annotation`相关的API,主要用于处理Java的注解(Annotation)。 `javax.annotation`是Java标准版(Java SE)的一部分,提供了标准的注解,...
hibernate 注解 annotation 教程