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

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

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

练习ORM

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

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

从上图可知:

  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高级特性——反射机制(完结)——反射与注解

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

完结!!!

上一篇:一篇文章看懂java反射机制(反射实例化对象-反射获得构造方法,获得普通方法,获得字段属性)


下一篇:Java核心技术梳理-类加载机制与反射