注解
内置注解
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
@Override
public String toString() {
return super.toString();
}
@Deprecated
public static void test01(){
System.out.println("test01");
}
@SuppressWarnings("all")
public static void test02(){
List list = new ArrayList();
List list2 = new ArrayList();
}
public static void main(String[] args) {
test01();
}
}
自定义注解
元注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value = {ElementType.METHOD, ElementType.TYPE}) // method, class
@Retention(RetentionPolicy.RUNTIME)
public @interface WwaAnnotation {
// 参数类型 参数名 默认为 ""
String studentname() default "";
int age() default 0;
int id() default -1;
String[] schools() default {"qinghua", "beida"};
}
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value = {ElementType.METHOD, ElementType.TYPE}) // method, class
@Retention(RetentionPolicy.RUNTIME)
public @interface WwaAnnotation02 {
String value();
}
@WwaAnnotation(schools = {"jiaoda", "ligong"})
public class Demo02 {
@WwaAnnotation(age = 19, studentname = "xiaoli")
public void test(){
}
@WwaAnnotation02("可以省略参数名")
public void test02(){
}
}
反射机制读取注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value = {ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTable {
String value();
}
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value = {ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyField {
String columName();
String type();
int length();
}
@MyTable("tb_student")
public class Student {
@MyField(columName = "id", type = "int", length = 10)
private int id;
@MyField(columName = "sname", type = "varchar", length = 10)
private String studentName;
@MyField(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;
}
}
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
/**
* 使用反射读取注解的信息, 模拟处理注解信息的流程
*/
public class Demo03 {
public static void main(String[] args) {
try {
Class clz = Class.forName("annot1.Student");
// 读取所有得到注解信息
Annotation[] annotations = clz.getAnnotations();
for (Annotation a: annotations) {
System.out.println(a);
}
// 获得类的指定的注解
MyTable st = (MyTable) clz.getAnnotation(MyTable.class);
System.out.println(st.value());
// 获得类的属性的注解
Field f = clz.getDeclaredField("studentName"); // 获取类的指定属性
MyField myField = f.getAnnotation(MyField.class); // 获取这个属性对应的某个注解对象
System.out.println(myField.columName()+"--"+ myField.type()+"--"+myField.length());
// 根据获得的表名, 字段信息, 拼出DDL语句, 然后, 使用JDBC执行这个SQL, 在数据库中生成相关的表
} catch (Exception e) {
e.printStackTrace();
}
}
}