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

 

 

posted @ 2021-02-07 15:14  石shi  阅读(147)  评论(0编辑  收藏  举报