zoukankan      html  css  js  c++  java
  • java 的自定义注解

    package com.design.design_note.spring;
    
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    // 用于描述注解的注解的使用范围,就是被描述的注解能用在什么地方
    
    /**
     * 取值(ElementType)有:
     *        1.CONSTRUCTOR:用于描述构造器
     *     2.FIELD:用于描述域
     *     3.LOCAL_VARIABLE:用于描述局部变量
     *     4.METHOD:用于描述方法
     *     5.PACKAGE:用于描述包
     *     6.PARAMETER:用于描述参数
     *     7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
     */
    @Target(ElementType.METHOD)
    /**
     * 用来定义注解的保留时间
     * 表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
     * 取值(RetentionPoicy)有:
     *        1.SOURCE:在源文件中有效(即源文件保留)
     *     2.CLASS:在class文件中有效(即class保留)
     *     3.RUNTIME:在运行时有效(即运行时保留)
     *
     * Product注解的的RetentionPolicy的属性值是RUTIME,这样注解处理器可以通过反射,获取到该注解的属性值,从而去做一些运行时的逻辑处理
     */
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Product {
        public  int id();
        public String name();
        public  String value();
    }

    // 注解使用的地方

    package com.design.design_note.spring;
    
    import java.lang.reflect.Method;
    import java.util.HashMap;
    import java.util.Map;
    
    // 设计我们的售卖机
    public class SelfService {
        @Product(id=1,name = "apple",value = "3.12/公斤")
        public void sellApple(){};
    
        @Product(id=2,name="banana" ,value="2.99/公斤")
        public void sellBanana(){
    
        }
    
    
    
    }
    

     // 测试注解的地方

    package com.design.design_note.spring;
    
    import java.lang.reflect.Method;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * java 的注解以及自定义注解
     */
    public class TestNote {
        //java 反射
        static Map<Integer,Product> ProductMap = null;
        // 静态代码块
        static  {
            ProductMap = new HashMap<Integer,Product>();
            for(Method m:SelfService.class.getDeclaredMethods()){
                Product p =  m.getAnnotation(Product.class);
                if (p != null) {
                    ProductMap.put(p.id(), p);
                }
            }
        }
    
        // 静态方法
        public  static  void  selfsell(int i){
            Product p = ProductMap.get(i);
            if(p!=null){
                System.out.println("sell product: id=" + p.id() + " name="
                        + p.name() + " value=" + p.value() );
            }
        }
        public static void main(String[] args) {
            selfsell(1);
        }
    }

     

  • 相关阅读:
    springboot scheduled多线程
    Oracle sql 小数点前面0不显示
    (转)VIM常用命令集锦
    java 面试题
    关于oracle start with connect by 全表扫描的一点想法
    (转)window.opener方法的使用 刷新父页面
    (转)jQuery “not readonly” selector
    (转)jquery合并单元格
    Java 格式化json为json树
    我的2018
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/14385304.html
Copyright © 2011-2022 走看看