注解学习

概念

注解其实就是一个接口,程序(注解控制器)通过反射来获取程序中的注解对象,然后通过该注解对象获得它的方法信息。

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 }
View Code

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 }
View Code

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 }
View Code
 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 }
View Code

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 }
View Code

posted @ 2019-06-06 00:23  Angry-rookie  阅读(178)  评论(0编辑  收藏  举报