java 自定annotation

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

* 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;
	}

  

  

 

时间: 2024-10-22 22:37:03

java 自定annotation的相关文章

主流的单元测试工具之-JAVA新特性-Annotation 写作者:组长 梁伟龙

1:什么是Annotation?Annotation,即“@xxx”(如@Before,@After,@Test(timeout=xxx),@ignore),这个单词一般是翻译成元数据,是JAVA的一个新特性. 主流的单元测试工具之-JAVA新特性-Annotation - groupthreetogether - group博客 2:元数据的简单介绍: @Before:使用了该元数据的方法在每个测试方法执行之前都要执行一次. @After:使用了该元数据的方法在每个测试方法执行之后要执行一次.

深入理解Java注解类型(@Annotation)

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 深入理解Java注解类型(@Annotation) - zejian的博客 - 博客频道 - CSDN.NET zejian的博客 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯]流畅的Python,终于等到你!    &am

Java Android 注解(Annotation) 及几个常用开源项目注解原理简析

不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义.解析,并对几个 Android 开源库 Annotation 原理进行简析.PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 完整版原文见:Java Android 注解(Ann

Java中的Annotation(2)----Annotation工作原理

Java中的Annotation(2)----Annotation工作原理 分类: 编程语言2013-03-18 01:06 3280人阅读 评论(6) 收藏 举报 上一篇文章已经介绍了如何使用JDK的三个标准Annotation,本文将介绍Annotation的原理,以及如何自定义Annotation,并利用Annotation来完成一些实际的功能. 定义Annotation 定义新的Annotation类型使用@interface关键字,这从一定意义上说明Annotation和接口的定义是有

Java基础笔记 – Annotation注解的介绍和使用 自定义注解

Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 |  被围观 25,969 views+ 1.Annotation的工作原理:2.@Override注解:3.@Deprecated注解:4.@SuppressWarnings注解:5.自定义注解:5.1.添加变量:5.2.添加默认值:5.3.多变量使用枚举:5.4.数组变量:6.设置注解的作用范围:6.1.在自定义注解中的使用例子:7.使用反射读取R

Java中的Annotation (一、系统内建的Annotatiion)

对于Annotation,是Java5以来的新特性,JDK5引入了Metadata(元数据).所谓元数据就是关于数据的数据.在编程语言上下文中,元数据是添加到程序元素如方法.字段.类和包上的额外信息. Java中的Annotation就是一种元数据,它提供一些本来不属于程序的数据,比如:一段代码的作者或者告诉编译器禁止一些特殊的错误.一个Annotation对代码的执行没有什么影响.Annotations使用@annotation的形式应用于代码:类(class),属性(field),方法(me

Java:注解Annotation(元数据)

本文内容: 注解Annotation的介绍 基本注解的用法 首发日期:2018-07-28 注解Annotation的介绍 Annotation是代码中的特殊标记,能够在编译.类加载.运行时被识别(需要设置),并根据不同的Annotation来执行不同的处理. Annotation可以修饰包.类.构造器.函数.成员变量.局部变量的声明.参数等程序元素.Annotation帮助这些元素来设置元数据,程序从元数据中获取信息来处理这些元素. 元数据可以描述代码间关系或者代码与其它资源的关系,比如说在w

【Hibernate】Hibernate的在Eclipse+Mysql的配置、安装,纯Java,利用Annotation与HQL完成数据库的增删改查

这篇文章有很多槽点,在Hibernate4.x上面用着Hibernate3.x的写法去写.而且程序中放到Eclipse中会有一大堆警告,但是这好歹也在一定程度上完成了Hibernate的入门.毕竟现在很多介绍Hibernate的书籍都是用Hibernate3.x的写法去写.上次那篇<[Hibernate]最简单的Hibernate工程--账号注册系统>(点击打开链接)杂糅Struts的技术其实是不对的.因为Hibernate完成的是,从Java到数据库,从数据库到Java的任务.之后Java与

主流的单元测试工具之-JAVA新特性-Annotation

写作者:组长 梁伟龙 1:什么是Annotation? Annotation,即“@xxx”(如@Before,@After,@Test(timeout=xxx),@ignore),这个单词一般是翻译成元数据,是JAVA的一个新特性. 2:元数据的简单介绍: @Before:使用了该元数据的方法在每个测试方法执行之前都要执行一次. @After:使用了该元数据的方法在每个测试方法执行之后要执行一次. 注意:@Before和@After标示的方法只能各有一个.这个相当于取代了JUnit以前版本中的