【spring】注解

注解

元注解

* @Target 可以定义的位置
* @Retention 注解的生命周期
* @Documented jdk文档中可现实
* @Inherited 子类可继承

自定义注解
注解的参数放在大括号内,格式为 参数类型 参数名() default 默认值

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface myAnnotation2{
    //myAnnotation2 有4个参数,分别为name,age,id 和schools
    String name() default "";
    int age() default 0;
    int id();
    String[] schools() default {"beijing","qinghua"};
}

如果只有一个参数,可以使用value,此时在使用注解时 value=“”前的value= 可以省略

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface myAnnotation3{
    String value();
}

测试

@myAnnotation2(id = 1)
@myAnnotation3("hi") //value= 可以省略
public void tes(){
    System.out.println();

}

注解和反射的结合运用:通过反射获取注解的值实现程序的注入

/**
 * 类名的注解
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface Table{
    String value();
}
/**
 * 字段的注解
 */

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface Filed{
    String columnName();
    String type();
    int length();
}
@Table("db_user")
@Data
class User{
    @Filed(columnName = "name",type = "varchar",length = 256)
    private String name;

    @Filed(columnName = "age",type = "int",length = 10)
    private int age;
}
**
 * 通过反射获取注解的值
 */

public class demo03 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
        Class user = Class.forName("basic.annotation.User");

        //通过反射获得注解
        Annotation[] annotations = user.getAnnotations();
        for (Annotation annotation : annotations) {
            System.out.println(annotation); //@basic.annotation.Table(value="db_user")
        }

        //通过反射获得类注解的value,然后作为数据库的值插入
        Table table = (Table)user.getAnnotation(Table.class);
        String value = table.value();
        System.out.println(value); //db_user

        //通过反射获得字段注解的value,然后作为数据库的值插入
        Field f = user.getDeclaredField("name");
        Filed field = f.getAnnotation(Filed.class);
        String col = field.columnName(); //name
        int length = field.length(); //256
        String type = field.type(); //varchar

        System.out.println(col);
        System.out.println(length);
        System.out.println(type);

    }

}





posted @ 2023-02-24 16:10  xiaoyu_jane  阅读(10)  评论(0编辑  收藏  举报