自定义注解(java实现个demo)

先盗个图表达下我的对知识的崇尚之情:

注解框架

代码:

业务场景:假如我是卖水果的,我要描述某一种水果的信息,直接用一些注解作为水果特征属性进行描述

1.先定义三个注解类:水果颜色、水果名字、水果供应商

package com.yoyo.yotils.yoyo.annotation;

import java.lang.annotation.*;

/**
 * 水果颜色注解
 * @author yoyo
 * @version $Id: FruitColor.java, v 0.1 2019年01月07日 10:52 yoyo Exp $
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitColor {
    /**
     * 颜色枚举
     */
    enum Color{
        BLUE, RED, GREEN
    }
    /**
     * 颜色注解
     * @return
     */
    Color fruitColor() default Color.GREEN;
}
package com.yoyo.yotils.yoyo.annotation;

import java.lang.annotation.*;

/**
 * 水果名称注解
 * @author yoyo
 * @version $Id: FruitName.java, v 0.1 2019年01月07日 10:49 yoyo Exp $
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitName {
    String value() default "";
}
package com.yoyo.yotils.yoyo.annotation;

import java.lang.annotation.*;

/**
 * 水果供应商注解
 * @author yoyo
 * @version $Id: FruitProvider.java, v 0.1 2019年01月07日 11:00 yoyo Exp $
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitProvider {
    /**
     * 供应商编号
     * @return
     */
    public int id() default  -1;

    /**
     * 供应商编号
     * @return
     */
    public String name() default "";

    /**
     * 供应商地址
     * @return
     */
    public String address() default "";
}

2.定义一种水果类:苹果,用自定义的注解描述:

package com.yoyo.yotils.yoyo.annotation.test;

import com.yoyo.yotils.yoyo.annotation.FruitColor;
import com.yoyo.yotils.yoyo.annotation.FruitName;
import com.yoyo.yotils.yoyo.annotation.FruitProvider;

/**
 * 注解描述的苹果类
 *
 * @author yoyo
 * @version $Id: Apple.java, v 0.1 2019年01月07日 11:08 yoyo Exp $
 */
public class Apple {
    @FruitName("Apple")
    private String appleName;

    @FruitColor(fruitColor = FruitColor.Color.RED)
    private String appleColor;

    @FruitProvider(id = 1, name = "陕西红富士集团", address = "陕西省西安市未央区红富士大厦")
    private String appleProvider;
}

3.获取注解的属性值(进行业务处理或参与数据库操作)

package com.yoyo.yotils.yoyo.annotation.test;

import com.yoyo.yotils.yoyo.annotation.*;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.stereotype.Component;

import java.lang.reflect.Field;

/**
 * 获取注解内容的测试类
 * @author yoyo
 * @version $Id: FruitInfoUtil.java, v 0.1 2019年01月07日 11:27 yoyo Exp $
 */
public class FruitInfoUtil {
    public static void getFruitInfo(Class<?> clazz) {
        String strFruitName = "水果名称:";
        String strFruitColor = "水果颜色:";
        StringBuilder strFruitProvider = new StringBuilder("水果供应商:");

        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            if (field.isAnnotationPresent(FruitName.class)) {
                FruitName fruitName = field.getAnnotation(FruitName.class);
                strFruitName = strFruitName + fruitName.value();
                System.out.println(strFruitName);
            } else if (field.isAnnotationPresent(FruitColor.class)) {
                FruitColor fruitColor = field.getAnnotation(FruitColor.class);
                strFruitColor = strFruitColor + fruitColor.fruitColor().name();
                System.out.println(strFruitColor);
            } else if (field.isAnnotationPresent(FruitProvider.class)) {
                FruitProvider fruitProvider = field.getAnnotation(FruitProvider.class);
                strFruitProvider = strFruitProvider.append("供应商编号:").append(fruitProvider.id()).append(";供应商名称:").append(
                        fruitProvider.name()).append(";供应商地址:").append(fruitProvider.address());
                System.out.println(strFruitProvider);
            }
        }
    }
    public static void main(String[] args) {
        FruitInfoUtil.getFruitInfo(Apple.class);

        //判断一个类是否有某个注解*****该工具类还有其他工具方法
        Component annotation = AnnotationUtils.findAnnotation(Apple.class, Component.class);
        if (annotation != null) {
            System.out.println("Apple类的注解为Comment注解类,且注解值annotation = " + annotation.value());
        }
    }
}

 执行main结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值