注解,是未来技术的先驱者,会带来一股风暴的,很多框架已经运用了注解,反射,其中不乏hibernate,spring这样的赫赫有名的框架,该知识的精华在于可以很干练的表示某个类的所属的信息,从而利用反射,可以达到事半功倍的效果
这里以常用的生活例子,写注解的运用。
解释:有一个学生的注解,该注解包含学生的一些信息,其他类加载该注解时,可以设置响应的属性信息,从而判断其他类的信息,这就等于给该类加上了一种学生标签,类其实也是具体的···准确理解这句话,那么注解,就很好理解了
首先是一个学生类的注解:
package com.study.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//元注解
@Retention(RetentionPolicy.RUNTIME)//注解的生命周期
@Target({ElementType.TYPE,ElementType.METHOD})//注解的运用场合(接口,类,枚举,方法,字段等等)
public @interface StuAnnotation {
String value() default "test";//可以设置默认值,当只有一个value方法时,在运用此注解时,只需要填写值
String id() default "000";//默认值
int age();//年龄
String[] hobbys();//学生爱好,数组爱好
ClassList whichClass();//所属班级,枚举类型
SchoolAnnotation school();//所属学校,注解类型
Class<?> isStu();//是否是学生,class类型
}
其次是该类所包含的班级枚举,学校类的注解,
package com.study.annotation;
//班级枚举,三个班级
public enum ClassList {
jk1,
jk2,
jk3
}
学校类的注解:
package com.study.annotation;
public @interface SchoolAnnotation {
String schoolName() ;
}
然后一个类,加载该注解,不妨命名为Student类
package com.study.annotation;
//设置学生信息,即加载注解信息
@StuAnnotation(age = 22, hobbys = { "football", "music", "acm" }, whichClass = ClassList.jk3, school = @SchoolAnnotation(schoolName = "xxx大学"), isStu = Student.class)
public class Student {
public void doSth(){
System.out.println("i am a student");
}
}
最后是一个测试类
package com.study.annotation;
public class MainTest {
public static void main(String[] args) {
if (Student.class.isAnnotationPresent(StuAnnotation.class)) {// 判断是否有StuAnnotation的注解
StuAnnotation stuAnnotation = Student.class.getAnnotation(StuAnnotation.class);// 如果有注解,返回注解的属性
// 返回各个属性信息
String value = stuAnnotation.value();
String id = stuAnnotation.id();
int age = stuAnnotation.age();
String[] hobbys = stuAnnotation.hobbys();
ClassList whichClass = stuAnnotation.whichClass();
SchoolAnnotation schoolAnnotation = stuAnnotation.school();
String schoolName = schoolAnnotation.schoolName();// 注解信息,向上再寻一层
Class<?> clazz = stuAnnotation.isStu();
// 输出信息F
System.out.println("-----该类信息如下-----");
System.out.println("value:" + value);
System.out.println("id:"+id);
System.out.println("age:"+age);
System.out.print("hobby:[");
for(String hobby:hobbys){
System.out.print(hobby+"\t");
}
System.out.println("]");
System.out.println("whichClass:"+whichClass);
System.out.println("schoolName:"+schoolName);
if(clazz.equals(Student.class)){
System.out.println("是否是学生:"+"是");
}else{
System.out.println("是否是学生:"+"否");
}
}
}
}