注解

注解是一个接口,程序通过反射机制获得指定程序元素的Annotion对象。通过这个对象来获取注解里的元数据。

元数据

mysql中有元数据的概念,是对数据的数据的一种描述
例如mysql中的元数据可以获得数据库服务器当前的状态,服务器的版本号。

元注解

负责注解其他注解
栗子

@Retention(RetetionPolicy.RUNTIME)
@Target(ElementType.TYPE)

public @interface MyAnnotation{
    public String name();
    public String value();
}

解释;在interface前加@表明这是一个注解,该注解可以使用到其他地方
再定义两个指示,其中@Retetion 表明注解会保留到运行期间,在编译的时候,不会去掉
@Target表明只能用在类和接口上面

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Column{
    // 其中default代表是默认的,fieldName为默认的内容
    public String name() default "fieldName";
    public String setFuncName() default "getField";
    public String getFuncName() default "getField";
    public boolean defaultDBvalue() default false;
}

@Documented在java生成文档的时候使用

@inherited
该注解某个被标注的类型是继承的,如果一个使用@inherited修饰的类型被用于一个class,则这个class是该class的子类。

@Inherited
public @interface Greeting{
    public enum FontColor{BULE, RED, GREEN};
    String name();
}

自定义注解

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitName{
    String value() default "";
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitColor{
    public enum Color{BULE, RED, GREEN};
    Color fruitColor() default Color.GREEN;
}
public class Apple{
    // 设置默认值为Apple
    @FruitName("Apple");
    private String appleName;
    // 设置默认fruitColor的默认值为Color.RED
    @FruitColor(fruitColor = Color.RED)
    private String appleColor;
}