• 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);
        }
    }

     

  • 相关阅读:
    NET CORE 数据库迁移
    VUE3.0 解析svg文件
    关于ElementUI的样式不生效
    git命令
    vue 2.x的跨域问题
    Putty 重新启动 linux sqlserver服务
    aspnetcore之session
    Syncfusion 在 core 的架构
    TortoiseSVN创建/合并分支
    正则表达式知识点整理
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/14385304.html
Copyright © 2020-2023  润新知