深入annotation

目标:

掌握@Target注释

掌握@Document注释

掌握@inherited注释

之前定义的annotation,如果没有明确声明,可以在任何地方使用:

package 类集;

@MyDefaultAnnotationReflect(key="MLDN",value="www.mldnjava.cn")  --此注释是上一节中定义的
public class SimpleBeanOne{
    @MyDefaultAnnotationReflect(key="MLDN",value="www.mldnjava.cn")
    public String toString(){
        return "Hello LiXingHua!!!" ;
    }
};

如果需要指定其使用范围,必须要使用@Target注释:

@Target

Target注释类型的必须元素如下:

ElementType枚举常量:

现在定义一个annotation,只能在类上使用,类型是Type

import java.lang.annotation.Target ;
import java.lang.annotation.ElementType ;
import java.lang.annotation.Retention ;
import java.lang.annotation.RetentionPolicy ;
@Target({ElementType.TYPE})        // 此注释只能用在类上
@Retention(value=RetentionPolicy.RUNTIME)
public @interface MyTargetAnntation{
    public String key() default "LXH" ;
    public String value() default "李兴华" ;
}

此时在simpleBean的类及方法的声明上使用此annotation。

@MyTargetAnntation(key="MLDN",value="www.mldnjava.cn")
public class SimpleBean{
    @MyTargetAnntation(key="MLDN",value="www.mldnjava.cn")  --这里会报错,因为上面声明了只能在类中使用。
    public String toString(){
        return "Hello LiXingHua!!!" ;
    }
};

现在如果想在类和方法都能使用,则必须设置多个范围

import java.lang.annotation.Target ;
import java.lang.annotation.ElementType ;
import java.lang.annotation.Retention ;
import java.lang.annotation.RetentionPolicy ;
@Target({ElementType.TYPE,ElementType.METHOD})        // 此注释只能用在类和方法上
@Retention(value=RetentionPolicy.RUNTIME)
public @interface MyTargetAnntation{
    public String key() default "LXH" ;
    public String value() default "李兴华" ;
}

@Document

@Document可以在任何的annotation上使用,所有annotation默认都是使用@Document进行注释的

而且在生成javadoc的使用可以通过@Document设置一些说明信息

定义一个@Document的注释:

import java.lang.annotation.Documented ;
@Documented
public @interface MyDocumentedAnntation{
    public String key() default "LXH" ;
    public String value() default "李兴华" ;
}

成功之后,在使用此annotation的时候就可以增加一些信息上去了。

@MyDocumentedAnntation(key="MLDN",value="www.mldnjava.cn")
public class SimpleBeanDocumented{
    /**
     * 此方法在对象输出时调用,返回对象信息
     */
    @MyDocumentedAnntation(key="MLDN",value="www.mldnjava.cn")
    public String toString(){
        return "Hello LiXingHua!!!" ;
    }
};

之后通过javadoc命令,生成java.doc文档。

打开文档,发现文档的内容把刚定义的类的信息加上去了。

2,

@Inhenited注释

此注释表示一个annotation是否可以被继承下来

package org.lxh.demo16.inheriteddemo ;
import java.lang.annotation.Retention ;
import java.lang.annotation.RetentionPolicy ;
import java.lang.annotation.Documented ;
import java.lang.annotation.Inherited ;
@Documented
@Inherited
@Retention(value=RetentionPolicy.RUNTIME)
public @interface MyInheritedAnnotation{
    public String name() ;

}

定义一个父类,在父类使用此annotation。

package org.lxh.demo16.inheriteddemo ;
@MyInheritedAnnotation(name="李兴华")
public class Person{
};

定义子类

package org.lxh.demo16.inheriteddemo ;
public class Student extends Person{
};

按照所解释:使用的inherited声明的annotation是可以被子类继承下来的。用反射来检验一下

import java.lang.annotation.Annotation ;
import org.lxh.demo16.inheriteddemo.MyInheritedAnnotation ;//注意,要把这个annotation包也导入。
public class ReflectInheritedDemo{
    public static void main(String args[]) throws Exception{
        Class<?> c = null ;
        c = Class.forName("org.lxh.demo16.inheriteddemo.Student") ;
        Annotation ann[] = c.getAnnotations() ;    // 取得全部的Annotation
        for(Annotation a:ann){    // 输出
            System.out.println(a) ;
        }
        // 继续取得此Annotation设置的内容,这里前面讲过
        if(c.isAnnotationPresent(MyInheritedAnnotation.class)){  //是否包含这种annotation。
            MyInheritedAnnotation mda = null ;
            mda = c.getAnnotation(MyInheritedAnnotation.class) ;//获取C这个class对象里面的这个annotation对象,
            String name = mda.name() ;    // 取出name的内容
            System.out.println("name = " + name) ;
        }
    }
}

输出结果:

总结:

1,熟悉Document注释的作用。加入说明信息。

2,属性Target作用,并使用Target注释指定注释的使用位置。

3,如果一个annotation要想被子类继承下来,则使用inherited注释说明。

4,反射机制对于操作annotation是最重要的。

时间: 2025-01-03 16:56:39

深入annotation的相关文章

Java Annotation 总结

Annotation 被称为注解,在Java开发中是相当常见的,通过注解,我们可以简化代码提高开发效率.例如Override Annotation,这个应该算是在开发过程中使用最多的注解了.下面这个例子是Android Activity的onCreate方法最常用的注解: @Override public void onCreate(Bundle savedInstanceState); 1.Annotation 概念 An annotation is a form of metadata, t

android导入其他工程源码包后出现大量错误提示remove @Override annotation 的解决办法

问题描述: GitHub 下载源码后将其com包内容导入自己android项目中,大量出现错误修改提示 remove @Override annotation 问题解法: 1. 2. 3. 将Compiler compliance level:设置在1.6及以上即可

自己写的基于java Annotation(注解)的数据校验框架

JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方便和重用,自己写了一个简单的基于Annotation的校验框架.有兴趣的可以扩展. 框架说明: AnnotationValidable接口:所有需要使用该校验框架的类都要实现它,该类中没有任何方法需要实现,仅仅是一个表明那些类需要使用该校验框架的标识. GetFiledValue类:是一个工具类,对

Annotation

从JDK1.5开始,Java就增加了Annotation这个新的功能,这种特性被称为元数据特性,同时也被称为注释. 系统内建的Annotation: 提醒:以下这三个系统内建的Annotation位于java.lang包下 [email protected],相信大家对这个比较熟悉,如果我们要重写一个类的方法的时候,要加上这个注解,但是很多人会反问,不加也是没问题的,但是我们必须考虑到的是程序的正确性,如果你本身的意图是重写这个方法,但是你在写的时候把方法名写错了,那么这就不是重写了,也改变了意

17.如何自学Struts2之Struts2 Annotation注释[视频]

17.如何自学Struts2之Struts2 Annotation注释[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95 有问题可以直接回复这篇文章.

Spring MVC @RequestMapping Annotation Example with Controller, Methods, Headers, Params, @RequestPar

Spring MVC @RequestMapping Annotation Example with Controller, Methods, Headers, Params, @RequestParam, @PathVariable Pankaj July 4, 2014 Spring @RequestMapping is one of the most widely used Spring MVC annotation.org.springframework.web.bind.annotat

Spring中的一个错误:使用Resources时报错(The annotation @Resources is disallowed for this location)

在学习Spring的过程中遇到一个错误:在使用注解@resources的时候提示:The annotation @Resources is disallowed for this location 后来来在学问Java网友的时候解决了. 原来的代码是这样的: 1 package com.show.biz; 2 3 import javax.annotation.Resources; 4 5 import com.show.biz.UserBiz; 6 import com.show.dao.Us

深入理解Java:注解(Annotation)--注解处理器

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

深入理解Java:注解(Annotation)自己定义注解入门

深入理解Java:注解(Annotation)自己定义注解入门 要深入学习注解.我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前.我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其它注解. Java5.0定义了4个标准的meta-annotation类型.它们被用来提供对其它 annotation类型作说明.Java5.0定义的元注解: [email protected], [email protected], [email pro

Spring - Annotation Based Configuration

Starting from Spring 2.5 it became possible to configure the dependency injection using annotations. So instead of using XML to describe a bean wiring, you can move the bean configuration into the component class itself by using annotations on the re