Java获取注解的字段属性值

原创 2018年04月17日 16:11:19

    最近看一些ORM框架的源码,自己记录一些笔记.类似于JPA,不用手写Sql,那个实体类要要@Table和@Column注解.(基于JDK1.8).

    首先自己定义一个@Column注解.

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Column {
    String name();
    String type() default "string";
    int length() default 20;
}

     实体类(使用了Lombok的依赖,不用在添加Set()和Get()方法,直接在类上面使用注解就可以的) 

@Table(name="student")
@Getter
@Setter
public class Student {
    @Id(name="sid")
    private int sid;
    @Column(name="sname")
    private String sname;
    @Column(name="sex")
    private String sex;
    @Column(name="age")
    private int age;

    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }

    public Student(int sid, String sname, String sex, int age){
        this.sid=sid;
        this.sname=sname;
        this.sex=sex;
        this.age=age;
    }
    public Student(){}
}

  接下来就是如何如何获取@Column注解的所有属性值,举个例子就是获取@Column(name="sname")中的sname.

 实现的源码如下:

 分析一下:首先我们要注意一点的就是我们注解的属性值是私有的实例变量,首先要设置私有变量的属性值是可以访问的,这里就要使用按个setAccessible(true),默认是false.保证注解属性值可以被访问到.

思路分析:

      1:由相应类的Class实例对象获取所有声明的变量(包括private).同时设置这些变量值的可访问性.

      2:获取相应的变量上面指定类型的注解(这里是@Column注解),同时使用一个String[]数组来保存的.  

import com.lx.orm.annotation.Column;
import com.lx.orm.entity.Student;
import java.lang.reflect.Field;
/**
 * title: com.lx.orm.util
 * @author: 
 * date: 
 * description:根据注解获取类的指定注解的属性值
 */
public class ColumnUtil {
    public static void main(String[] args) {
    String[] str=getColumnValue(Student.class);
        for (int i = 1; i <str.length ; i++) {
            System.out.println(str[i]);
        }
    }
    public static String[] getColumnValue(Class classz) {
            Field[] fields=classz.getDeclaredFields();
            Field field;
            String[] value=new String[fields.length];
            for (int i = 0; i <fields.length ; i++) {
                fields[i].setAccessible(true);
            }
            for(int i = 1;i<fields.length ; i++){
                try {
                    field=classz.getDeclaredField(fields[i].getName());
                    Column column=field.getAnnotation(Column.class); //获取指定类型注解
                    if(column!=null){
                        value[i]=column.name();
                    }
                } catch (NoSuchFieldException e) {
                    e.printStackTrace();
                }
            }
            return value;
    }
}

运行结果如下:

            

正是自己想要的那三个基于@Column注解的属性值.


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HcJsJqJSSM/article/details/79975940

Java反射 获取某个类的属性值、字段名、注解等常用代码

Java反射 获取某个类的属性值、字段名、注解等常用代码
  • programmer_sir
  • programmer_sir
  • 2014-12-15 22:12:55
  • 29985

java中自定义注解并通过反射获取注解属性值

直接上代码,注释中有说明: 1、定义自定义注解类(类注解和字段注解): package com.uno.ray; import java.lang.annotation.Documented...
  • Raynaing
  • Raynaing
  • 2016-12-03 10:38:58
  • 8716

JAVA 注解验证字段(例子)

注解类 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @Documented @Inherited public ...
  • a_ahreo
  • a_ahreo
  • 2014-02-13 10:46:56
  • 1024

Java 使用反射获取类、方法、属性上的注解

有的时候我们想使用反射获取某个类的注解、方法上的注解、属性上的注解。 下面是一个简单的例子。里面包括了上面提到的三个点。...
  • baidu_18607183
  • baidu_18607183
  • 2014-11-10 14:35:56
  • 8429

反射获取枚举上的注解

关于反射获取枚举上的信息,javaSE的jdk相关API里面并没有提供方法,直接获取也只能获取到enum类上的注解,上网搜了半天,中文没搜到解决方法结果,感觉太坑爹了,于是记录且分享如下: 一、前言...
  • lufeng20
  • lufeng20
  • 2013-04-22 16:29:42
  • 5283

Java中通过注解+反射拿到对象的属性和方法

1什么是反射? java通常是先有类再有对象,有对象我就可以调用方法或者属性。反射其实是通过Class对象来调用类里面的方法 下面就是测试代码,里面有详细的注释 package co...
  • ArryLuo123
  • ArryLuo123
  • 2017-02-16 09:46:44
  • 1664

spring 使用注解获取properties 文件属性值

1.配置bean   截取片段 classpath:application.properties
  • linhaiguo
  • linhaiguo
  • 2016-06-03 19:40:14
  • 5407

自己写的基于java Annotation(注解)的数据校验框架

源代码和UT请见http://download.csdn.net/source/2640884 JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也...
  • chjttony
  • chjttony
  • 2010-08-23 16:47:00
  • 9326

利用反射获取类或者方法或者字段上的注解的值

从JDK1.5之后,注解在各大框架上得到了广泛的应用。下面这个例子中,你可以判断一个类或者方法或者字段上有没有注解,以及怎么获取上面的注解值。话不多说,代码如下: AnnotationTest01.j...
  • zknxx
  • zknxx
  • 2016-05-26 23:34:32
  • 9476

使用自定义注解来验证属性是否规范

上一篇文章我们写了一个通过注解返回查询sql语句的例子,这次我们来使用注解去验证某个对象属性是否按照我们的注解来赋值的。 例子:我们需要定义一个MyLimit的注解,这个注解里面规定了类属性的限制;...
  • u014104286
  • u014104286
  • 2016-08-23 14:33:55
  • 2066
收藏助手
不良信息举报
您举报文章:Java获取注解的字段属性值
举报原因:
原因补充:

(最多只允许输入30个字)