注解:
* 用来标识的
* 注解是用来标注类里的东西
* 注解不能单独存在,只能依附于类中的结构
package cn.itcast.annotation0401;
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;
/**
* 注解类
* @author Administrator
* * 提供标注在类的哪些部位
* * 这个注解的作用范围是哪些
* * 在document里(帮助文档里)是否体现注解类
*/
/**
* @Target能标注在注解类型上
* ElementType
* TYPE
* 类和接口
* FIELD
* 属性
* METHOD
* 方法
* PARAMETER
* 方法中的参数
* CONSTRUCTOR
* 构造器
* ANNOTATION_TYPE
* 注解类型
* PACKAGE
* 包
* 指明了所在的注解类能标注在类的哪些部位
* @Target({ElementType.TYPE,ElementType.METHOD})
* 既可以标注在类上也可以标注在方法上
*/
@Target(ElementType.TYPE)
/**
* 是否让@Description这个注解出现在帮助文档中
*/
@Documented
/**
* @Retention
* 说明@Description注解的作用域
* RetentionPolicy.SOURCE
* @Description这个注解在源文件中起作用
* RetentionPolicy.CLASS
* @Description这个注解即在源文件中起作用又在class文件中起作用
RetentionPolicy.RUNTIME
@Description在源文件、class文件、运行的过程中都起作用
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface Description {
String value();//属性
}
package cn.itcast.annotation0401;
@Description(value="这是一个学生类")
public class Student {
@Name(aa="这是一个方法")
public void say(){
System.out.println("aaa");
}
@Name(aa="说明这个学生来源")
public void des(){
System.out.println("来自传智播客,good student");
}
}
package cn.itcast.annotation0401;
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;
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target(ElementType.METHOD)
public @interface Name {
String aa();
}
package cn.itcast.annotation0401;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import org.junit.Test;
/**
* 注解解析器
* @author Administrator
*
*/
public class StudentParse {
@Test
public void parse() throws Exception{
Class classStudent = Class.forName("cn.itcast.annotation0401.Student");
if(classStudent.isAnnotationPresent(Description.class)){//如果该注解存在
Description description = (Description)classStudent.getAnnotation(Description.class);
System.out.println(description.value());
}
Method[] methods = classStudent.getMethods();
System.out.println(methods.length);
for(Method method:methods){
System.out.println(method.getName());
if(method.isAnnotationPresent(Name.class)){//如果该注解存在
Name name = (Name)method.getAnnotation(Name.class);
System.out.println(name.aa());
}
}
}
}