java自定义Annotation(载自百度文库)

java中自定义annotation需要@interface关键字和用到几个内置annotation。

用到的注解有@Target,@Retention,@Documented,@Inherited ,用途如下:
     @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:

ElemenetType.CONSTRUCTOR 构造器声明 
         ElemenetType.FIELD 域声明(包括 enum 实例)

   ElemenetType.LOCAL_VARIABLE 局部变量声明

     ElemenetType.METHOD 方法声明

    ElemenetType.PACKAGE 包声明

    ElemenetType.PARAMETER 参数声明 
        ElemenetType.TYPE 类,接口(包括注解类型)或enum声明            
      @Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:

RetentionPolicy.SOURCE 注解将被编译器丢弃 
        RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃

RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。            
     @Documented 将此注解包含在 javadoc 中        
     @Inherited 允许子类继承父类中的注解    
    @Documented的目的就是让这一个Annotation类型的信息能够显示在javaAPI说明文档上;

  没有添加的话,使用javadoc生成API文档的时候就会找不到这一个类型生成的信息.

另外一点,如果需要把Annotation的数据继承给子类,那么就会用到@Inherited这一个。  
      下面自定义两个简单的annatation。  package annotation;  
import java.lang.annotation.Documented;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;  
@Target(ElementType.TYPE)
 @Retention(RetentionPolicy.RUNTIME)  @Documented
 public @interface Description {
     String value() default "no description";

}

package annotation;  
import java.lang.annotation.Documented;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;  
@Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)

@Documented
 public @interface Name {

String originate();

String community();

}

package annotation;  
@Description("javaeye, to be best")

public class JavaEyer {
     @Name(originate = "创始人:robbin", community = "javaeye")

public String getEyeName() {

return null;

}
     @Name(originate = "创始人:江南白衣", community = "springside")

public String getSideName() {

return "excuse me";

}

}

package annotation;  
import java.lang.reflect.Method;

import java.util.HashSet;  import java.util.Set;  
public class AnnotationTest {

@SuppressWarnings("unchecked")
     public static void main(String[] args) throws ClassNotFoundException {

final String CLASS_NAME = "annotation.JavaEyer";

Class test = Class.forName(CLASS_NAME);

Method[] methods = test.getMethods();
         boolean flag = test.isAnnotationPresent(Description.class);

if (flag) {
             Description des = (Description) test.getAnnotation(Description.class);

System.out.println("描述:" + des.value());

System.out.println("-----------------");

}
         Set<Method> set = new HashSet<Method>();

for (int i = 0; i < methods.length; i++) {
             boolean otherflag = methods[i].isAnnotationPresent(Name.class);

if (otherflag) {
                 set.add(methods[i]);

}

}
         for (Method method : set) {
             Name name = method.getAnnotation(Name.class);

System.out.println(name.originate());
             System.out.println("创建的社区:" + name.community());

}

}

时间: 2024-08-03 08:30:08

java自定义Annotation(载自百度文库)的相关文章

java自定义Annotation,得到注解类中Annotation设定的注解值

java注解机制在各大框架中应用普遍,注解中可以设置一些值,如何得到呢. 要得到注解类中Annotation设定的注解值 即:遍历自定义Annotation中的方法,反射执行方法,结果就是 对应的注解值. java代码例子: package com.doctor.spring.core; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotat

Java自定义Annotation

创建一个自定义的Annotation import java.lang.annotation.*; import java.lang.reflect.Method; @Documented @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface MethodInfo { String author() default "hupeng"; String version() defa

android反射组件 (一)java 自定义annotation基础知识

自定义annotation包括三部分: 自定义annotation.使用annotation的类.annotation的处理方法. 一.自定义annotation  元注解包括以下: 1)@Target    描述注解使用的范围 取值包括: 1.CONSTRUCTOR:用于描述构造器 2.FIELD:用于描述域 3.LOCAL_VARIABLE:用于描述局部变量 4.METHOD:用于描述方法 5.PACKAGE:用于描述包 6.PARAMETER:用于描述参数 7.TYPE:用于描述类.接口(

Java自定义Annotation,通过反射解析Annotation

创建一个自定义的Annotation import java.lang.annotation.*; import java.lang.reflect.Method; @Documented @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface MethodInfo { String author() default "hupeng"; String version() defa

Java自定义Annotation方法

1. 基本语法 Java代码 import java.lang.annotation.ElementType;   import java.lang.annotation.Target;   // The @Bind tag.   @Target(ElementType.METHOD)   @Retention(RetentionPolicy.RUNTIME)   public @interface Bind {       public String name();       public 

Java中的Annotation (二、自定义Annotation)

今天学习如何开发一个自定义的Annotation.要想使Annotation有意义,还需要借用前几天学习的反射机制. 下面就开始今天的学习吧. Annotation的定义格式.它类似于新创建一个接口类文件,但为了区分,我们需要将它声明为 @interface public @interface Annotation名称{ 数据类型 变量名称(); } 下面声明了一个Annotation public @interface MyAnnotation { } 使用这个Annotation @MyAn

深入JAVA注解(Annotation):自定义注解 (转)

原文出自:http://blog.csdn.net/yjclsx/article/details/52101922 一.基础知识:元注解 要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其他注解.Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明.Java5.0定义的元注解: [email prote

百度文库的实现——java利用openoffice,word转pdf

百度文库的主要功能就是将上传的word文档,转码成pdf格式再展示出来.其中有四种方法可以实现这样的操作: 方法一:用apache pio 读取doc文件,然后转成html文件用Jsoup格式化html文件,最后用itext将html文件转成pdf. 方法2:使用jdoctopdf来实现,这是一个封装好的包,可以把doc转换成pdf,html,xml等格式,调用很方便需要注意中文字体的写入问题. 方法3:使用jodconverter来调用openOffice的服务来转换,openOffice有个

java 自定义类的加载器

首先介绍自定义类的应用场景: (1)加密:Java代码可以轻易的被反编译,如果你需要把自己的代码进行加密以防止反编译,可以先将编译后的代码用某种加密算法加密,类加密后就不能再用Java的ClassLoader去加载类了,这时就需要自定义ClassLoader在加载类的时候先解密类,然后再加载. (2)从非标准的来源加载代码:如果你的字节码是放在数据库.甚至是在云端,就可以自定义类加载器,从指定的来源加载类. (3)以上两种情况在实际中的综合运用:比如你的应用需要通过网络来传输 Java 类的字节