1.通过getAnnotation获取所有的运行时注解
@Deprecated
@SuppressWarnings("student")
class Student implements Serializable {
}
Class<?> studentClass = Student.class;
Annotation[] annotations = studentClass.getAnnotations();
for (Annotation annotation : annotations) {
System.out.println(annotation);
}
输出结果:@java.lang.Deprecated()
2.自定义annotion
@Retention(RetentionPolicy.RUNTIME)
@interface Factory {
public String value() default "mingi";
public String key();
}
@Factory(key = "fuzhiwei")
@Deprecated
@SuppressWarnings("student")
class Student implements Serializable {
}
Class<?> studentClass = Student.class;
Annotation[] annotations = studentClass.getAnnotations();
for (Annotation annotation : annotations) {
System.out.println(annotation);
}
运行结果:
@com.mingji.Factory(value=mingi, key=fuzhiwei)
@java.lang.Deprecated()
3.获取指定的annotion的内容
Class<?> studentClass = Student.class;
Factory annotation = studentClass.getAnnotation(Factory.class);
System.out.println(annotation.key());
System.out.println(annotation.value());
运行结果:
fuzhiwei
mingi
4.通过在类中配置annotion的参数来构造对象
@Retention(RetentionPolicy.RUNTIME)
@interface AnnotationFactory {
String className();
}
@AnnotationFactory(className = "com.mingji.News")
public class Demo {
public static void main(String[] arg) throws Exception {
AnnotationFactory an = Demo.class.getAnnotation(AnnotationFactory.class);
Class<?> cls = Class.forName(an.className());
Message message = (Message) cls.newInstance();
message.print("今天要下雨");
}
}
结果:新闻消息: 今天要下雨