Java 自定义注解

直接切入正题,下面我们自定义一个注解Entity,并通过Entity注解动态获取指定类的映射表进行数据查询(本案例只作为演示,所以比较简要),请看代码:

1、定义一个Java注解Entity

package com.tyyd.anno;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Target是Java的元注解,可以指定注解的生效范围(如范围是类、方法、构造方法等)
 * 本注解声明作用范围为类和属性
 * Retention:指定注解的生命周期,如RetentionPolicy.RUNTIME指定注解存活于运行时,
 * RetentionPolicy.CLASS指定存活于class文件中
 */
@Target({ElementType.TYPE, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Entity {
    // 通过default指定一个默认值
    public String value() default "";
}

2、定义一个实体类,并给它赋予@Entity注解 

package com.tyyd.entity;

import com.tyyd.anno.Entity;

/**
 * 注解当中如果只有一个值如@Entity("city"),那么默认"city"对应的是value的值。它等价于@Entity(value="city")。
 * 如果注解当中有多个属性且对应多个值@Entity(value="city", name="wzx"),则value=以及name=不能省略
 */
@Entity("city")
public class CityEntity {
    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

3、定义一个工具类,通过这个工具类中的方法,我们动态获取一条SQL查询语句

package com.tyyd.util;

import com.tyyd.anno.Entity;

public class CommUtil {

    /**
     * 通过一个对象,来构建一条查询的SQL语句
     * @param object
     */
    public static String buildQuerySqlForEntity(Object object) {
        Class clazz = object.getClass();
        // 判断是否加了Entity注解
        if (clazz.isAnnotationPresent(Entity.class)) {
            // 得到注解
            Entity entity = (Entity)clazz.getAnnotation(Entity.class);
            String entityName = entity.value();
            String sql = "select * from " + entityName + " where id = '1' and name = 'wzx'";
            return sql;
        }
        return "";
    }
}

运行一个Test测试类,查看控制台输出结果:

import com.tyyd.entity.CityEntity;
import com.tyyd.util.CommUtil;

public class Test {
    public static void main(String[] args) {
        CityEntity cityEntity = new CityEntity();
        cityEntity.setId("1");
        cityEntity.setName("test");
        String sql = CommUtil.buildQuerySqlForEntity(cityEntity);
        System.out.println(sql);
    }
}

以上便是一个自定义注解及其功能的案例演示。觉得文章能够给你带来帮助,可以给个赞,关注本人的博客哦。一起努力,相互学习,共同成长!一个Java架构师的成长之路……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章