自定义注解实例分析

自定义注解Book

/*
    说明 : 如果一个注解中仅有一个属性数据, 那么请将该注解属性的名称定义为 value.
    好处 : 使用该注解时, 可以省略该属性的名称.
 */
// @Target 使用的目标位置
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE})

// Retention 保留
// 注意 : 反射必须将 `保留策略` 定义运行时, 没有选择.
// @see java.lang.reflect.AnnotatedElement  注解元素接口
@Retention(RetentionPolicy.RUNTIME)

public @interface Book {

    // 书名
    String value();

    // 价格
    int price() default 998;

    // 作者
    String[] authors();
}

BookShelf 类使用注解 :

public class BookShelf {

    String id;

    // 方法 :
    @Book(value = "降龙十九掌", authors = {"张三丰", "灭绝师太"})
    public void showInfo() {

        String value = "";
        int price = 0;
        String[] authors = {};

        System.out.println("value = " + value);
        System.out.println("price = " + price);
        System.out.println("Arrays.toString(authors) = " + Arrays.toString(authors));

    }
}

@Book(value = "降龙十九掌", authors = {"张三丰", "灭绝师太"})
public void showInfo() {

String value = "";
int price = 0;
String[] authors = {};

/*
1. boolean isAnnotationPresent(注解类型)  判断调用对象是否存在指定注解
2. Annotation getAnnotation(注解类型); 返回指定的注解类型对象.

AnnotationElement 接口 : 实现类有  Class, Method, Filed, Constructor
 */
// 1. 获取本类的 class 对象
Class<? extends BookShelf> cls = this.getClass();

try {
    // 2. 获取指定方法对象
    Method method = cls.getMethod("showInfo");

    // 3. 获取该方法上的指定注解信息
    if (method.isAnnotationPresent(Book.class)) {

        // 4. 获取信息
        Book book = method.getAnnotation(Book.class);

        // 5. 取出信息
        value = book.value();
        price = book.price();
        authors = book.authors();
    }

} catch (NoSuchMethodException e) {
    // 如果数据有问题, 使用自己内部的, 如果数据正常, 使用注解提供的.
}

System.out.println("value = " + value);
System.out.println("price = " + price);
System.out.println("Arrays.toString(authors) = " + Arrays.toString(authors));

}

测试类

public class AnnotationTest1 {
    public static void main(String[] args) {

        BookShelf bookShelf = new BookShelf();
        bookShelf.showInfo();
    }
}

原文地址:http://blog.51cto.com/13962277/2172982

时间: 2024-10-10 09:20:41

自定义注解实例分析的相关文章

我爱java系列---【自定义注解】

一.注解概述 1.定义:注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类. 接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面,用来对这些元素 进行说明,注释. 2.作用分类: 编写文档:通过代码里标识的注解生成文档[例如,生成文档doc文档] 代码分析:通过代码里标识的注解对代码进行分析[例如,注解的反射] 编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查[例如,Override] 3.常

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

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

注解Annotation实现原理与自定义注解例子

? 什么是注解? 对于很多初次接触的开发者来说应该都有这个疑问?Annontation是Java5开始引入的新特征,中文名称叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类.方法.成员变量等)进行关联.为程序的元素(类.方法.成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且供指定的工具或框架使用. Annontation像一种修饰符一样,应用于包.类型.构造方法.方法.成员变量.参数及本地变量的声明语句中. Java注

注解:java 自定义注解应用实例

本例子旨在使用自定义注解为实体打上标记,为自动生成 sql 提供依据,模拟 hibernate 的注解,至于注解的原理自己搜吧 1.定义 Table 注解 [java] view plain copy package test; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lan

自定义注解使用实例

一.需求 1.有一张用户表,字段包括用户ID,用户名,昵称,年龄,性别,所在城市,邮箱和手机号: 2.方便的对每个字段的或字段的组合条件进行检索,并打印出sql语句. 二.代码 1.用户表的实体类 1 package com.anndemo.entity; 2 3 import com.anndemo.ann.Column; 4 import com.anndemo.ann.Table; 5 6 /** 7 * 用户表的实体类 8 * @author chen 9 * 10 */ 11 @Tab

java 注解分析及自定义注解

注解概念: java提供了一种原程序中的元素关联任何信息和任何元数据的途径与方法. 注解分类: 运行机制分类:源码注解,编译时注解,运行时注解. 来源分类:JDK的注解,第三方注解,自定义注解. 自定义注解语法要求: import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Inherited;import java.lang.annotat

java自定义注解类

一.前言 今天阅读帆哥代码的时候,看到了之前没有见过的新东西, 比如java自定义注解类,如何获取注解,如何反射内部类,this$0是什么意思? 于是乎,学习并整理了一下. 二.代码示例 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Tar

Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(四)

这一章大象将详细分析web层代码,以及使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能.     之前在使用Struts2实现MVC的注解时,是借助struts2-convention这个插件,如今我们使用Spring自带的spring-webmvc组件来实现同样的功能,而且比之以前更简单.另外,还省掉了整合两个框架带来的不稳定因素.     对于Spring MVC框架,我主要讲一下它的常用注解,再结合一些示例进行说明,方便大家能够快速理解.     一.Spring MV

深入浅出Java Annotation(元注解和自定义注解)

一.基本概述 Annontation是Java5开始引入的新特征.中文名称一般叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类.方法.成员变量等)进行关联. 更通俗的意思是为程序的元素(类.方法.成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且是供指定的工具或框架使用的. Annontation像一种修饰符一样,应用于包.类型.构造方法.方法.成员变量.参数及本地变量的声明语句中. 二.原理 Annotation其实是