概念
注解其实就是一个接口,程序(注解控制器)通过反射来获取程序中的注解对象,然后通过该注解对象获得它的方法信息。
4种标准元注解
@Target 修饰对象的范围
@Retention定义被保存的时间 SOURCE(源文件保留)、CLASS(class保留)、RUNTIME(运行时保留)
@Documented 用于描述其他类型的注解被作为标注的程序成员的公共API,可以被javadoc文档化
@Inherited 阐述了某个被标注的类型是被继承的,即它的父类被注解时,它的子类也会被注解
注解处理器
用来读取注解的,没有它注解就等同于注释
注解编写
1.自定义注解编写

1 package com.zhao.annotation; 2 3 import java.lang.annotation.Documented; 4 import java.lang.annotation.ElementType; 5 import java.lang.annotation.Retention; 6 import java.lang.annotation.RetentionPolicy; 7 import java.lang.annotation.Target; 8 9 /** 10 * 自定义一个注解 11 * @author 光头强 12 * 13 */ 14 15 16 @Target(ElementType.FIELD) 17 @Retention(RetentionPolicy.RUNTIME) 18 @Documented 19 public @interface annotationDemo { 20 public int id() default -1; 21 public String name() default "我"; 22 public String address() default "港湾"; 23 24 25 }
2.注解处理器编写

1 package com.zhao.annotation; 2 3 import java.lang.reflect.Field; 4 5 /** 6 * 注解处理器 7 * @author 光头强 8 * 9 */ 10 public class annotationUtil { 11 12 public annotationUtil() { 13 // TODO 自动生成的构造函数存根 14 } 15 //利用反射获取 16 public static String getAnnotationInfo(Class<?> clz){ 17 String strInfo="个人信息:"; 18 //反射获取处理注解 19 Field[] fid=clz.getDeclaredFields(); 20 for(Field f:fid){ 21 //如果有这个注解 22 if(f.isAnnotationPresent(annotationDemo.class)){ 23 annotationDemo annotationdemo=(annotationDemo)f.getAnnotation(annotationDemo.class); 24 //注解的作用,本次注解获取它的个人信息 25 return strInfo+=" id: "+annotationdemo.id()+" 姓名:"+annotationdemo.name()+" 地址:"+annotationdemo.address(); 26 } 27 } 28 return "请添加注解"; 29 } 30 31 }
3.被注解类编写

1 package com.zhao.annotation; 2 3 public class people { 4 @annotationDemo(id=1,name="北上广不相信眼泪",address="上海") 5 private String info; 6 public String getInfo() { 7 return info; 8 } 9 public void setInfo(String info) { 10 this.info = info; 11 } 12 public people() { 13 // TODO 自动生成的构造函数存根 14 } 15 16 }

1 package com.zhao.annotation; 2 3 public class people1 { 4 //使用默认的 5 @annotationDemo 6 private String info; 7 public String getInfo() { 8 return info; 9 } 10 public void setInfo(String info) { 11 this.info = info; 12 } 13 public people1() { 14 // TODO 自动生成的构造函数存根 15 } 16 17 }
4.运行被注解类

1 package com.zhao.annotation; 2 3 public class doMain { 4 5 public doMain() { 6 // TODO 自动生成的构造函数存根 7 } 8 9 public static void main(String[] args) { 10 String p=annotationUtil.getAnnotationInfo(people.class); 11 String p1=annotationUtil.getAnnotationInfo(people1.class); 12 System.out.println("people个人信息:"+p); 13 System.out.println("----------------"); 14 System.out.println("people个人信息:"+p1); 15 } 16 17 }