1 注解简介:
a) 存在意义: 定义后用于被编译器读取,并服务于使用注解的类上
b) 定义和使用步骤:
b.1) 定义注解
b.2) 在目标类中声明引用注解
b.3) 定义解释类解释注解和处理注解
2 注解详细概念看下图:
3 注解简单定义和使用:
1 定义注解 @Target(value={ElementType.METHOD,ElementType.TYPE}) // 指定作用范围为 方法和类上 @Retention(RetentionPolicy.RUNTIME)// 指定有效范围(soruce + class 级别都有效并支持反射) public @interface SxtAnnotation01 { // 定义属性时,基本需要有默认值,否则使用注解时候会报错 提示让有初始值 初始值一般为空串或者0 如果是-1则表示不存在 String studentName() default ""; int age() default 0; int id() default -1; //String indexOf("abc") -1 String[] schools() default {"清华大学","北京上学堂"}; } 2 使用注解 @SxtAnnotation01 // 在类上使用注解 public class Demo02 { @SxtAnnotation01(age=19,studentName="老高",id=1001, schools={"北京大学","北京航空航天大学"}) public void test(){ // 在方法上使用注解 并赋值 } }
4 注解在 orm上使用简单写法:
1 定义表注解 @Target(value={ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface TableAnno { String value(); } 2 定义属性注解 @Target(value={ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface FieldAnno { String columnname(); String type(); int length(); } 3 实体bean上引用注解 @TableAnno(value = "student_table") public class Student { @FieldAnno(columnname = "id", length = 10, type = "int") private int id; @FieldAnno(columnname = "name", length = 10, type = "varchar") private String name; @FieldAnno(columnname = "age", length = 3, type = "int") private int 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; } } 4 定义解析处理注解类 public class AnalyticalAnnocation { /** * 解析自定义注解 */ public static void main(String[] args) { try { Class<Student> clazz = (Class<Student>) Class.forName("zm.annocation.Student"); // 得到类注解TableAnno的属性值 TableAnno tableAnno = clazz.getAnnotation(TableAnno.class); System.out.println(tableAnno.value()); // student_table // 得到属性注解 Field field = clazz.getDeclaredField("id"); FieldAnno fieldAnno = field.getAnnotation(FieldAnno.class); int idLen = fieldAnno.length(); String idType = fieldAnno.type(); String idName = fieldAnno.columnname(); System.out.println(idName + "--" + idType + "--" + idLen );//id--int--10 Field field1 = clazz.getDeclaredField("name"); FieldAnno fieldAnno1 = field1.getAnnotation(FieldAnno.class); int nameLen = fieldAnno1.length(); String nameType = fieldAnno1.type(); String nameName = fieldAnno1.columnname(); System.out.println(nameName + "--" + nameType + "--" + nameLen );//name--varchar--10 Field field2 = clazz.getDeclaredField("age"); FieldAnno fieldAnno2 = field2.getAnnotation(FieldAnno.class); int ageLen = fieldAnno2.length(); String ageType = fieldAnno2.type(); String ageName = fieldAnno2.columnname(); System.out.println(ageName + "--" + ageType + "--" + ageLen );//age--int--3 // 如上操作得到实体Student对应表明,表字段名称,类型,长度,下面就可以通过拼接来实现创建.查询,等SQL操作 // ........ 略 } catch (Exception e) { e.printStackTrace(); } } }