ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java高级特性——反射机制(完结)——反射与注解

2020-08-12 09:32:46  阅读:228  来源: 互联网

标签:反射 Java name int age id 注解 public String


按照我们的学习进度,在前边我们讲过什么是注解以及注解如何定义,如果忘了,可以先回顾一下https://www.cnblogs.com/hgqin/p/13462051.html。

在学习反射和注解前,首先要练习一个ORM。

练习ORM

1.了解什么是ORM:Object RelationShip Mapping ——> 对象关系映射。

 

 从上图可知:

  1.类和表结构对应。

  2.属性和字段对应。

  3.对象和记录对应。

要求:利用注解和反射完成类和表结构的映射关系。

package test;

import java.lang.annotation.Annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;


//通过反射操作注解
public class Test{
    public static void main(String[] args) {
        Class c1 = Student.class;
        
        //利用反射获取注解
        Annotation[] annotations = c1.getAnnotations();
        for(Annotation annotation : annotations) {
            System.out.println(annotation);
        }
        
        //获取注解的value的值
        TableHgqin tableHgqin = (TableHgqin) c1.getAnnotation(TableHgqin.class);
        String value = tableHgqin.value();
        System.out.println(value);
        
        
        //获得类指定的注解
        Field[] fields = c1.getDeclaredFields();
        for(Field field : fields) {
            System.out.println("#字段为: "+field);
            annotations = field.getAnnotations();
            for(Annotation annotation : annotations) {
                System.out.println(annotation);
            }
            //获取注解对应的值
            FieldHgqin fieldHgqin = (FieldHgqin)field.getAnnotation(FieldHgqin.class);
            System.out.println(fieldHgqin.columnName());
            System.out.println(fieldHgqin.type());
            System.out.println(fieldHgqin.length());
        }
        
    }
}

@TableHgqin("db_student")
class Student{
    
    @FieldHgqin(columnName="db_id",type="int",length=10)
    private int id;
    @FieldHgqin(columnName="db_name",type="int",length=10)
    private String name;
    @FieldHgqin(columnName="db_age",type="varchar",length=3)
    private int age;
    
    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Student(int id, String name, int age) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "student [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
    
}


//类名的注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface TableHgqin{
    String value();
}

//属性的注解
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface FieldHgqin{
    String columnName();
    String type();
    int length();
}

 

运行结果为:

 

 几篇文章的所有案例,均需要一个一个练习,多看几次就懂了。

 

 完结!!!

标签:反射,Java,name,int,age,id,注解,public,String
来源: https://www.cnblogs.com/hgqin/p/13488791.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有