美文网首页
java自定义注解

java自定义注解

作者: wxz1997 | 来源:发表于2018-06-19 14:09 被阅读0次

一、元注解

java.lang.annotation提供了四种元注解,专门注解其他的注解(在自定义注解的时候,需要使用到元注解):
@Documented –注解是否将包含在JavaDoc中
@Retention –什么时候使用该注解
@Target –注解用于什么地方
@Inherited – 是否允许子类继承该注解
@Retention– 定义该注解的生命周期

  1. RetentionPolicy.SOURCE : 在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义,所以它们不会写入字节码。@Override, @SuppressWarnings都属于这类注解。
  2. RetentionPolicy.CLASS : 在类加载的时候丢弃。在字节码文件的处理中有用。注解默认使用这种方式
  3. RetentionPolicy.RUNTIME : 始终不会丢弃,运行期也保留该注解,因此可以使用反射机制读取该注解的信息。我们自定义的注解通常使用这种方式。

二、自定义注解

自定义注解,并没有对所加注解的方法起作用,为了让这些注解起作用,需要通过反射的方式获取该注解携带的信息。

package cn.wxz1997.concurrency.annotation;

import java.lang.annotation.*;

/**
 * @Description: 自定义注解
 * @Author: wxz1997
 * @Date 18-6-19下午1:27
 */
@Inherited  //是否允许子类继承该注解
@Documented  //注解是否将包含在JavaDoc中
@Target(ElementType.METHOD)  //设置该注解修饰的地方,如设置为METHOD,则只能应用于方法
@Retention(RetentionPolicy.RUNTIME) //表示该注解可以保留到运行时
public @interface MyAnnotation {
    /**
     * 注解的成员变量要以无参方法的形式定义,可以使用default给其设置默认值
     * @return
     */
    String description() default "自定义注解";
}

package cn.wxz1997.concurrency.annotation;

/**
 * @Description: 测试对象
 * @Author: wxz1997
 * @Date 18-6-19下午1:55
 */
public class Test {
    @MyAnnotation(description = "执行test方法")
    public void test(){
        System.out.println("test方法执行");
    }
}
package cn.wxz1997.concurrency.annotation;

import java.lang.reflect.Method;

/**
 * @Description: 自定义注解处理工具类
 * @Author: wxz1997
 * @Date 18-6-19下午1:56
 */
public class ActionUtil{

    public static void test(String className) {
        try {
            Class cls = Class.forName(className);
            Object obj = cls.newInstance();
            Method[] methods = cls.getMethods();
            for (Method method: methods){
                //获取方法上的注解
                MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);
                //存在此注解,则调用该方法
                if (null != myAnnotation){
                    String description = myAnnotation.description();
                    System.out.println("该方法的描述为:" + description);
                    method.invoke(obj, new Object[] {});
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        ActionUtil.test("cn.wxz1997.concurrency.annotation.Test");
    }
}

相关文章

  • Java注解知识梳理—自定义注解处理器

    Java注解知识梳理—自定义注解处理器 前言 前面介绍了如何自定义注解以及Java中关于注解的一些元素作用,学会了...

  • 注解学习笔记

    什么是注解注解分类注解作用分类 元注解 Java内置注解 自定义注解自定义注解实现及使用编译时注解注解处理器注解处...

  • springMVC的自定义annotation(@Retenti

    自定义注解: 使用@interface自定义注解时,自动继承了java.lang.annotation.Annot...

  • 画个图,玩一下注解

    参考《深入理解Java:注解(Annotation)自定义注解入门》

  • 注解的使用

    元注解 注解 注解本质就是接口: 元注解:修饰注解的注解 自定义注解 Text.java FruitName.ja...

  • 注解

    Java注解 注解 元注解 自定义注解 元注解:负责注解其他注解 共有4个标准的meta-annotation类型...

  • Spring注解原理探索(一)

    之 Java元注解释义 Question 注解在Java中如何起作用? Spring是如何识别注解? 如何自定义注...

  • Java注解与Spring注解

    1,元注解与自定义注解 1)java.lang.annotation包中包含了所有定义自定义注解所需要的元注解和接...

  • JAVA之自定义注解

    java的基本注解和元注解,不满足条件时可以自定义注解。声明自定义注解使用@interface关键字实现。 根据注...

  • Android 编译时注解 —— 语法详解

    java Type 详解 java 反射机制详解 注解使用入门(一) Android 自定义编译时注解1 - 简单...

网友评论

      本文标题:java自定义注解

      本文链接:https://www.haomeiwen.com/subject/foyaeftx.html