java中自定义annotation

一 自定义注解的语法很简单

public @interface MyAnnotation
{

}

上面的代码就定义了一个空注解,名字为MyAnnotation。

 

 

二 自定义注解也可以有属性

public @interface MyAnnotation
{
 public String key() default "name";
 public String value() default "xy";
}

若要策略为运行时注解,需加上Retention注解

@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation
{
 public String key() default "name";
        public String value() default "xy";
}

 

三 为使Annotation有意义,必须结合反射取得设置的内容,下面是一个完整的例子

MyAnnotation.java
package cn.interfaces;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation
{
 public String key() default "name";
 public String value() default "xy";
}

 

SimpleBean.java
package cn.bean;
import cn.interfaces.MyAnnotation;

public class SimpleBean
{
 @MyAnnotation(key = "name", value = "xy")
 public void save()
 {
  System.out.println("save");
 }
}

 

Test.java
package cn.test;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import cn.interfaces.MyAnnotation;

public class Test
{
 public static void main(String[] args) throws IOException,
                                ClassNotFoundException, SecurityException, NoSuchMethodException
 {
  Class<?> c = Class.forName("cn.bean.SimpleBean");
  Method saveMethod = c.getMethod("save");
  Annotation an[] = saveMethod.getAnnotations(); // 取得全部的运行时Annotation
  for (Annotation a : an)
  {
   System.out.println(a);
  }

  if (saveMethod.isAnnotationPresent(MyAnnotation.class)) // 该方法上是否存在该种类型的注解
  {
   MyAnnotation ma = saveMethod.getAnnotation(MyAnnotation.class);
   String key = ma.key();
   String value = ma.value();
   System.out.println("key = " + key);
   System.out.println("value = " + value);
  }
 }
}

 

输出结果

@cn.interfaces.MyAnnotation(value=xy, key=name)
key = name
value = xy

 

结论

annotation和反射相结合会有很大的作用。

 

 

时间: 2024-08-01 21:09:22

java中自定义annotation的相关文章

java中自定义数据库连接池

连接池是非常好的想法,应用很普遍.自己写一个数据库连接池,并不像想象中那样困难.一般系统对连接池的功能不会有太多要求,使用自己的连接池未必是个坏主意.下面以Oracle为例,但是对Teradata和Greenplum也是可行的.另外我还实现了连接有效性检查(checkConn)和恢复连接(resetConn)的方法.本例编程采用的是JRE1.4.2环境(别忘了准备访问数据库的jar包).有任何问题请随时留言,欢迎探讨. 在Oracle内创建测试数据: drop table my_table; c

【Java】Java中自定义的异常

package com.ceac.deng; public class T10Exception { public static void main(String[] args) { Number number = new Number(); try { number.divided(2, 0); } catch (A e) { // TODO Auto-generated catch block System.out.println(e.getMessage()); e.printStackT

Java中ResultSet数据自动填充到类中&amp;amp;类实例填充PreparedStatement

需求: (1)提取ResultSet中值到一个类中挺麻烦的,需要new一个变量,使用对应成员的Set方法赋值,能不能根据类的Class,直接提取出ResultSet中的数据,最后返回实例化的类? (2)可以用PreparedStatement预编译带变量的sql语句,在execute之前需要将变量值填充进去,一个一个设置太麻烦了,能不能提供一个类变量,使用类成员变量的值自动填充PreparedStatement? 这样的功能许多开源的框架可以实现,但是不想因为这么一点点的需求去学习那么庞大的一套

Java中注解(Annotation)自定义注解入门

要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其他注解.Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明.Java5.0定义的元注解: 1.@Target, 2.@Retention, 3.@Documented, 4.@Inherited 这些类型和它们所支持的类在java.lang.annot

Java中的注解(Annotation)--注解处理器

如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中, 很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构 造自定义注解处理器. 注解处理器类库(java.lang.reflect.AnnotatedElement): Java 使用Annotation接口来代表程序元素前面的注解,该接口是所有Annotation类型的父接口.除此之外, Java在java.lang.reflect 包下新增了AnnotatedE

补课了,30分钟让你学会java自定义annotation

自定义Annotation概念篇 来看一个最简单的annotation package com.cts.elt.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; importjava.lang.annotation.RetentionPolicy; import java.lang.a

Java中注解(Annotation)的基本概念

什么是注解(Annotation): Annotation(注解)就是Java提供了一种元程序中的元素关联 任何信息和着任何元数据(metadata)的途径和方法.Annotion(注解)是一个接口,程序可以通过反射 来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据. Annotation(注解)是JDK5.0及以后版本引入的.它可以用于创建文档,跟踪代码中的依赖性, 甚至执行基本编译时检查.从某些方面看,annotation就像修饰符一样被使用,并应

JS自定义对象实现Java中Map对象功能的方法

这篇文章主要介绍了JS自定义对象实现Java中Map对象功能的方法,可实现类似Java中Map对象增删改查等功能,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了JS自定义对象实现Java中Map对象功能的方法.分享给大家供大家参考.具体分析如下: Java中有集合,Map等对象存储工具类,这些对象使用简易,但是在JavaScript中,你只能使用Array对象. 这里我创建一个自定义对象,这个对象内包含一个数组来存储数据,数据对象是一个Key,可以实际存储的内容! 这里Key

JS自定义对象实现Java中Map对象功能的方法_javascript技巧

本文实例讲述了JS自定义对象实现Java中Map对象功能的方法.分享给大家供大家参考.具体分析如下: Java中有集合,Map等对象存储工具类,这些对象使用简易,但是在JavaScript中,你只能使用Array对象. 这里我创建一个自定义对象,这个对象内包含一个数组来存储数据,数据对象是一个Key,可以实际存储的内容!   这里Key,你要使用String类型,和Java一样,你可以进行一些增加,删除,修改,获得的操作. 使用很简单,我先把工具类给大家看下: 复制代码 代码如下: /**  *