zoukankan      html  css  js  c++  java
  • 注解学习

    概念

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

    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

  • 相关阅读:
    android在开发过程中的数据库存储位置
    JSONArray的初始化的形式
    Android中asset文件夹与raw文件夹的区别深入解析(转)
    Android 建立Menu选单&&onOptionsItemSelected (转)
    onItemLongClick+onCreateContextMenu实现长按ListItem弹出不同菜单
    thrift框架
    64 位 win7 使用PLSQL Developer(转)
    Java-->服务器的响应(Servlet--doGet&doPost)
    JAVA printWriter中write()和println()区别
    JavaWeb学习总结(六)—HttpServletResponse
  • 原文地址:https://www.cnblogs.com/pythoncd/p/10982712.html
Copyright © 2011-2022 走看看