Java--注解及反射读取注解

什么是注解?

定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

作用分类:

①编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】
② 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】
③编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】


java中常见注解

1.Override


含义:对父类的方法重写。
表示方法声明旨在覆盖超类中的方法声明。如果该注释类型注释了一个方 法,但不重写超类方法,则需要编译器生成错误消息。
Java--注解及反射读取注解_第1张图片
Target注解值—-ElementType的类型:

                取值                                  注解使用范围
METHOD 可用于方法
TYPE 可用于类或者接口上
ANNOTATION_TYPE 可用于注解类型上(被@interfaace修饰的类型)
CONSTRUCTOR 可用于构造方法上
FIELD 可用于域上
LOCAL_VARIABLE 可用于局部变量上
PACKAGE 用于记录java文件的package信息
PARAMETER 可用于参数上

Retention注解值类型:

Java--注解及反射读取注解_第2张图片

2.Deprecated


含义:过时的,废弃的。
可以用此注解修饰一个过时的方法,如果在使用此方法时该方法会划横线,但是依旧可以使用。

3.SuppressWarnings


含义:镇压警告。
Java--注解及反射读取注解_第3张图片
SuppressWarnings注解值类型:

Java--注解及反射读取注解_第4张图片


自定义注解

使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。

Annotation类型里面的参数该怎么设定:   
第一,只能用public或默认(default)这两个访问权修饰.例如,String value();这里把方法设为defaul默认类型;   
第二,参数成员只能用基本类型byte,short,char,int,long,float,double,
boolean八种基本数据类型和String,Enum,Class,annotations等数据类型,以及这一些类型的数组.例如,String value();这里的参数成员就为String;  
第三,如果只有一个参数成员,最好把参数名称设为”value”,后加小括号。

Java--注解及反射读取注解_第5张图片
我们可以实现自定义的注解了,但是这还是无法使用的,我们需要用反射机制读取注解。

使用反射读取注解—–实现ORM

目的:给一个javabean添加注解后就可以生成对应的数据表。

1. 自定义注解—–StuTable

作用:用于表示创建的表的名字。
Java--注解及反射读取注解_第6张图片

2. 自定义注解—–StuField

作用:用于表示表中的列名、类型和长度
Java--注解及反射读取注解_第7张图片

3. 创建JavaBean—–student并加上注解

@StuTable("StuTable")
public class Student {
    @StuField(columnName="stuName",type="varchar",length="10")
    private String stuName;
    @StuField(columnName="stuAge",type="int",length="2")
    private int stuAge;
    @StuField(columnName="stuTel",type="varchar",length="11")
    private String stuTel;

    public String getStuName() {
        return stuName;
    }
    public void setStuName(String stuName) {
        this.stuName = stuName;
    }
    public int getStuAge() {
        return stuAge;
    }
    public void setStuAge(int stuAge) {
        this.stuAge = stuAge;
    }
    public String getStuTel() {
        return stuTel;
    }
    public void setStuTel(String stuTel) {
        this.stuTel = stuTel;
    }
    public Student(String stuName, int stuAge, String stuTel) {
        super();
        this.stuName = stuName;
        this.stuAge = stuAge;
        this.stuTel = stuTel;
    }
    public Student() {
    }
    @Override
    public String toString() {
        return "Student [stuAge=" + stuAge + ", stuName=" + stuName
                + ", stuTel=" + stuTel + "]";
    }
}

4. 使用反射进行读取注解

Java--注解及反射读取注解_第8张图片

读取结果:
这里写图片描述

5. 拼SQL语句,使用JDBC创建表

String sql = "create table "+tableName+"("+stuName.columnName()+" "+stuName.type()+"("+stuName.length()+"),"+stuAge.columnName()+" "+stuAge.type()+"("+stuAge.length()+"),"+stuTel.columnName()+" "+stuTel.type()+"("+stuTel.length()+"))";
            QueryRunner query = new QueryRunner(DataSourceUtils.getDataSource());
            query.update(sql);

表生成成功:
这里写图片描述

OK!end.我们现在可以实现自己的ORM系统了。

你可能感兴趣的:(注解,orm,反射)