系统内置注解:
@Override : 表示重写父类的方法
@Deprecated: 对不推荐使用的方法进行注释。
@SuppressWarnings : 告诉编译器忽略指定的警告,不用在编译完成后出现警告信息
@Override : 表示重写父类的方法
@Deprecated: 对不推荐使用的方法进行注释。
@SuppressWarnings : 告诉编译器忽略指定的警告,不用在编译完成后出现警告信息
自定义注解:
/** * 自定义注解,自动实现了Annotation接口 * @Target 表示允许在哪里使用 * @Retention 表示允许反射获取信息 * Created by yz on 2018/03/15. */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String value() default ""; int id() default 0; String[] arr(); } class AnnDemo{ private String name; @MyAnnotation(value = "123",id=123,arr={"11","22"}) public void add(){ } }
@Target 说明注解所修饰的对象范围:
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型)或enum声明
自定义注解实现ORM框架
ORM框架:对象关系映射
定义两个注解:
1.自定义表映射注解
2.自定义字段属性注解
/** * 1.自定义表映射注解 (表的别名) * Created by yz on 2018/03/15. */ @Retention(RetentionPolicy.RUNTIME) public @interface SetTable { String value(); }
/** * 2.自定义字段属性 (属性注解) * Created by yz on 2018/03/15. */ @Retention(RetentionPolicy.RUNTIME) public @interface SetProperty { String name(); int length(); }
/** * Created by yz on 2018/03/15. */ @SetTable("user_table") public class UserEntity { @SetProperty(name="user_name",length=10) private String userName; @SetProperty(name="user_age",length=10) private Integer userAge; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Integer getUserAge() { return userAge; } public void setUserAge(Integer userAge) { this.userAge = userAge; } }
/** * 使用注解将实体类转换成数据库表驼峰式结构,并生成sql语句 * Created by yz on 2018/03/15. */ public class Main { public static void main(String[] args) throws ClassNotFoundException { // 项目中使用注解,肯定会使用到反射。反射应用场景 jdbc spring ioc ,一些注解实现 Class<?> forName = Class.forName("cn.annotation.UserEntity"); // getAnnotations() 表示该类上用到了哪些注解 Annotation[] annotations = forName.getAnnotations(); // for (Annotation annotation : annotations) { // System.out.println(annotation); // @cn.annotation.SetTable(value="user_table") // } // 生成orm框架sql语句 StringBuffer sb = new StringBuffer(); sb.append("select "); // getDeclaredFields() 表示获取该类所有的属性字段,包括public、private和proteced Field[] declaredFields = forName.getDeclaredFields(); for (int i = 0; i < declaredFields.length; i++) { // 获取注解的对象 SetProperty setProperty = declaredFields[i].getAnnotation(SetProperty.class); // 获取name的属性值 String property = setProperty.name(); sb.append(property); // 说明到了最后一个 if(i == (declaredFields.length-1)){ sb.append(" from "); }else { sb.append(" , "); } } // getAnnotation 表示获取某个注解对象 SetTable setTable = forName.getAnnotation(SetTable.class); // 表的名称 String tableName = setTable.value(); System.out.println(tableName); // user_table sb.append(tableName); System.out.println(sb.toString()); // select user_name , user_age from user_table } }