*
* •Annotation的作用: – 不是程序本身,可以对程序作出解释。 (这一点,跟注释没什么区别) –
* 可以被其他程序(比如:编译器等)读取。 (注解信息处理流程,是注解和注释的重大区别 。如果没有注解信息处理流程, 则注解毫无意义)
* 给类添加注解,相当于对类进行了说明, 并且还可以被其他的程序读到 如hibernate使用注解,我们使用的注解可以被hibernate读到
*
* • Annotation的格式: – 注解是以“@注释名”在代码中存在的
* ,还可以添加一些参数值,例如: @SuppressWarnings(value="unchecked")。
*
* • Annotation在哪里使用? – 可以附加在package, class, method, field等上面,
* 相当于给它们添加了额外的辅助信 息, 我们可以通过反射机制编程实现对这些元数据的访问
*
* 内置注解: • @Override – 定义在java.lang.Override中, 此注释只适用于修辞方法,表示一个方
* 法声明打算重写超类中的另一个 方法声明。
*
* • @Deprecated – 定义在java.lang.Deprecated中, 此注释可用于修辞方法、属性、类
* ,表示不鼓励程序员使用这样的元素, 通常是因为它很危险或存在更 好的选择
*
* 内置注解:
*
* • @Override
* – 定义在java.lang.Override中,此注释只适用于修辞方法,
* 表示一个方 法声明打算重写超类中的另一个方法声明。
* • @Deprecated
* – 定义在java.lang.Deprecated中,
* 此注释可用于修辞方法、属性、类 ,
* 表示不鼓励程序员使用这样的元素
* ,通常是因为它很危险或存在更 好的选择
*
* • @SuppressWarnings
* – 定义在java.lang.SuppressWarnings中,
* 用来抑制编译时的警告信息 。
* – 与前两个注释有所不同,你需要添加一个参数才能正确使用,
* 这些参 数值都是已经定义好了的,我们选择性的使用就好了,
* 参数如下
* deprecation/uncheked/fallthrough/path/serial/finally/all
*
* – @SuppressWarnings("unchecked")
* – @SuppressWarnings(value={"unchecked", "deprecation"})
*
public class CUAnnotation {
@Override // 表示一个方 法声明打算重写超类中的另一个方法声明
public String toString() {
return "";
}
@Deprecated // 表示不鼓励程序员使用这样的元素
public String toStringt() {
return "";
}
public String toStringte() {
return "";
}
}
* 自定義注解:
* • 使用@interface自定义注解时,
* 自动继承了java.lang.annotation.Annotation接口
* •要点:
* – @interface用来声明一个注解
* • 格式为: – public @interface 注解名 {定义体}
* –其中的每一个方法实际上是声明了一个配置参数。
* – 方法的名称就是参数的名称 – 返回值类型就是参数的类型
* (返回值类型只能是基本类型、
* Class、String、enum)
* – 可以通过default来声明参数的默认值。
* – 如果只有一个参数成员,一般参数名为value
* •注意: 注解元素必须要有值。
* 我们定义注解元素时, 经常使用空字符串、0作为默认值。
* 也经常使用负数(比如:-1)表示不存在的含义
*
* 元注解:
* • 元注解的作用就是负责注解其他注解。
* Java定义了4个标准的 meta-annotation类型,
* 它们被用来提供对其它 annotation 类型作说明。
* • 这些类型和它们所支持的类在java.lang.annotation包中可以 找到
* – @Target
* – @Retention
* – @Documented
* – @Inherited
*
* – @Target
* • 作用: – 用于描述注解的使用范围
* (即:被描述的注解可以用在什么地方)
*
*
* (重要)的@Retention
* – @Retention
* • 作用:
* – 表示需要在什么级别保存该注释信息,
* 用于描述注解的生命周
* (SOURCE、CLASS(编辑器、加载器)、RUNTIME通过反射读取)
*
*
*
* ORM()对象关系映射
*
* •使用注解完成类和表结构的映射关系
*1.
*使用自定义注解@OrmAnnotaytion("tb_student")
*表示此类和哪个表对应,表名为tb_student
*2**
* 对属性(变量)进行说明 这个对应表的属性字段,类型是,长度为
*
*再使用反射机制对注解信息进行读取看MYOrmclass.java
*/
@OrmAnnotaytion("tb_student")
public class MYOrm {
/**
* 对属性(变量id)进行说明 这个id对应表的属性字段id,类型是int,长度为10
*/
@OrmAnnotaytiontable(columName = "id", type = "int", length = 10)
private int id;
/**
* 对属性(变量studentName)进行说明 这个studentName对应表的属性字段sname,类型是int,长度为10
*/
@OrmAnnotaytiontable(columName = "sname", type = "int", length = 10)
private String studentName;
/**
* 对属性(变量age)进行说明 这个age对应表的属性字段age,类型是int,长度为3
*/
@OrmAnnotaytiontable(columName = "age", type = "int", length = 3)
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
*
* 反射机制读取注解的信息
*/
public class MYOrmclass {
public static void main(String[] args) {
try {
// 1.加载这个类形成对象clzz
Class<?> clzz = Class.forName("com.renhui.cn.MYOrm");
// 2获取类的所有注解
Annotation[] annotations = clzz.getAnnotations();
for (Annotation a : annotations) {
System.out.println(a);
}
// 3获取这个类里面一个具体的指定的注解OrmAnnotaytion
OrmAnnotaytion or = (OrmAnnotaytion) clzz.getAnnotation(OrmAnnotaytion.class);
// 打印这个注解的value值
System.out.println(or.value());
//4获得类中指定的属性的注解自定义注解的名字为OrmAnnotaytiontable
//这个方法返回一个Filed对象代表这个属性(也就是MYOrm中的变量studentName)
Field f =clzz.getDeclaredField("studentName");
//获取这个属性的注解,返回一个这个自定义的注解的对象
OrmAnnotaytiontable orr = f.getAnnotation(OrmAnnotaytiontable.class);
System.out.println(orr.columName()+"--"+orr.type()+"--"+orr.length());
//根据获得的表名 字段信息来构建sql语句,使用jdbc来执行sql语句从而建立一个数据库
} catch (Exception e) {
// TODO: handle exception
System.out.println("null");
}
}
}
自定义的注解部分:
*MYOrm使用的自定义注解
*这个注解用来说明被注解的类与哪个对应(这里是一个表,参数是表名)
*/
@Target(value= {ElementType.TYPE})//TYPE修饰类,对一个类进行修饰
@Retention(RetentionPolicy.RUNTIME)//在源文件中有效(自我笔记:用于反射可以读到)
public @interface OrmAnnotaytion {
String value();/*一个参数,和那个表对应,表名*/
}
*MYOrm使用的自定义注解
*这个注解用来说明被注解的属性的特性(这里是用来对应列名)
*/
@Target(value = { ElementType.FIELD }) // FIELD修饰属性,对属性进行修饰
@Retention(RetentionPolicy.RUNTIME)
public @interface OrmAnnotaytiontable {
String columName();
String type();
int length();
}