码迷,mamicode.com
首页 > 编程语言 > 详细

java 自定annotation

时间:2016-01-12 01:06:44      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

##自定义的注解有四个注意的内容:

* Target

@Target(ElementType.TYPE) // 注解可以使用的位置
* Retention

@Retention(RetentionPolicy.RUNTIME)// 生命周期

* Documented

@Documented
// 其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。

* Inherited

@Inherited// 可以被子类继承

 

示例代码:

Table.java

@Target(ElementType.TYPE)
// 注解可以使用的位置
@Retention(RetentionPolicy.RUNTIME)
// 生命周期
@Documented
// 其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。
@Inherited
// 可以被子类继承
public @interface Table {
	String value();

}

 Column.java

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
	String value();

}

  实体类

  person.java

  

@Table("person")
public class Person {

	@Column("id")
	private int id;
	
	@Column("name")
	private String name;
	
	@Column("age")
	private int age;
	
	@Column("email")
	private String email;
    
        //get/set...
}

  测试类
  

public static void main(String[] args) {
		query(new Person());
	}

	public static String query(Object o) {
		boolean b = o.getClass().isAnnotationPresent(Table.class);
		if (!b) {
			return null;
		}

		Table table = o.getClass().getAnnotation(Table.class);
		String tableName = table.value();
		System.out.println("tableName>>" + tableName);// 获取table表名

		Field[] fields = o.getClass().getDeclaredFields();
		for (Field f : fields) {
			boolean feildIsAnnotationed = f.isAnnotationPresent(Column.class);
			if (!feildIsAnnotationed) {
				continue;
			}
			Column c = f.getAnnotation(Column.class);
			System.out.println("列注解的值:" + c.value());// 获取注解的列名

			String fieldName = f.getName();
			System.out.println("列名:" + fieldName);
			// 通过反射获取列的值
			String getMethod = "get" + fieldName.substring(0, 1).toUpperCase()
					+ fieldName.substring(1);
			System.out.println("方法名:" + getMethod);
			try {
				Method method = o.getClass().getMethod(getMethod);
				System.out.println("方法的返回值》》》" + method.invoke(o));
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}

  

  

 

java 自定annotation

标签:

原文地址:http://www.cnblogs.com/fengyexjtu/p/5122958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!