之前定义的Annotation,如果没有明确说明使用位置,则可以再任何位置使用;
1、@Target(value=ElementType.Type)----只能用在类上;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
//此注释表示下面的@MyTargetAnnotation注释只能用在类上
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(value=RetentionPolicy.RUNTIME)
public @interface MyTargetAnnotation{
public String key() default "lid";
public String value() default "yuj";
}
@MyTargetAnnotation(key="yuj",value="lid")
public class SimpleBean{
@Override
@MyTargetAnnotation(key="yuj",value="lid")
public String toString(){
return null;
}
}
2、@Documented可以用在任何的Annotation上使用,所有的Annotation默认情况下都是用
@Documented进行注释的,而且在生成javadoc的时候可以通过@Documented设置一些
说明。
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
//此注释表示下面的@MyTargetAnnotation注释只能用在类上
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(value=RetentionPolicy.RUNTIME)
public @interface MyTargetAnnotation{
public String key() default "lid";
public String value() default "yuj";
}
@MyTargetAnnotation(key="yuj",value="lid")
public class SimpleBean{
/**
*此方法在对象输出时调用,返回对象信息
*/
@MyTargetAnnotation(key="yuj",value="lid")
public String toString(){
return null;
}
}
之后通过javadoc命令,生成java doc文档;
命令:javadoc -d doc SimpleBean.java
这样上面的关于方法的注释会在生成文档时加入到文档中;
3、Inherited:
定义一个可以被继承的Annotation
package com.demo.lid;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Documented;
@Retention(value=RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface MyInherited{
public String name();
}
定义一个父类:
package com.demo.lid;
@MyInherited(name="lid")
public class Person{
}
定义一个子类:
package com.demo.lid;
public class Student extends Person{
}
使用Inherited声明的Annotation是可以被子类继承下来的;
通过反射来验证时候子类继承了父类的Annotation
package com.demo.lid;
import java.lang.annotation.Annotation;
public class ReflectInheritedDemo{
public static void main(String args[]) throws Exception{
Class<?> c=Class.forName("com.demo.lid.Student");
Annotation ann[]=c.getAnnotations();
for(Annotation a : ann){
System.out.println(a);
}
//继续取得此Annotation设置的内容
if(c.isAnnotationPresent(MyInherited.class)){
//上面指的是c元素上存在MyInherited注释
MyInherited mda=null;
mda=c.getAnnotation(MyInherited.class);
String name=mda.name();//取得name属性
System.out.println("name="+name);
}
}
}
本文深入探讨Java中的注解使用方式,包括@Target限定注解作用范围、@Documented影响Javadoc生成、@Inherited实现注解继承等特性,并通过实例演示如何在实际项目中运用这些注解。

被折叠的 条评论
为什么被折叠?



