Java注解

常见注解

JDK自带注解

1.@Override  表示一个方法覆盖了父类的方法,若父类中没有同名同参方法,使用该注解会报错。

2.@Deprecated  表示一个方法已过期,不推荐使用该注解

3.@Suppvisewarnings  表示关闭一些警告信息,如@Suppvisewarnings("deprecation") 表示忽略过期方法的提示

Spring注解

1.@Component  加在类声明上,表示一个类作为bean加载到spring容器中

2.@Autowired  加载一个属性上,表示为该属性自动装配一个对象。

Mybatis注解

1.@InsertProvider 

2.@UpdateProvider

3.@Options

注解分类

按照运行机制

  1. 源码注解                注解只在源码中存在,编译成.class文件就不存在了
  2. 编译时注解            注解在源码和.class文件都存在  
  3. 运行时注解            注解在运行时仍起重要作用

按照来源分类

  1. JDK自带注解
  2. 框架注解
  3. 自定义注解

元注解 :注解的注解

              java中有四个元注解

元注解描述
@Target

表示该注解可以用于什么地方。可能的ElementType参数包括:

CONSTRUCTOR:构造器的生命

FIELD:域声明(包括enum实例)

LOCAL_VARIABLE:局部变量声明

METHOD:方法声明

PACKAGE:包声明

PARAMETER:参数声明

TYPE:类、接口(包括注解类型)和enum声明

ANNOTATION_TYPE:注解声明(与TYPE的区别?专门用在注解上的TYPE)

TYPE_PARAMETER:Java8

TYPE_USE:Java8

@Retention

表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:

SOURCE:注解将在编译器丢弃

CLASS:注解在class文件中可用,但会被VM丢弃

RUNTIME:VM将在运行期也保留注解,因此可以通过反射机制读取注解的信息

@Inherited允许子类继承父类中的注解
@Documented生成Javadoc时会包含此注解信息

自定义注解

自定义注解要求:

  1. 必须以@interface声明为注解
  2. 成员变量需以无参无异常方法格式声明
  3. 只有一个成员变量时,规定使用value作为名称
  4. 使用元注解限制其属性
@Documented        //元注解                         
@Inherited
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Description {
    String value();                     

    String author();

    String key() default "";
}

使用注解举例

@Description(value="test value",author = "wang")
public String desc(){
    return "hello this is desc";
}

 通过反射使用注解

@Documented        //元注解
@Inherited
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Description {
    String desc();

    String author() default "wang";

    String key() default "";
}

public class Person {
    public Person(){}

    @Description(desc = "这是name")          //author--"wang"  key--""
    private String name;

    @Description(desc = "这是年龄")          //author--"wang"  key--""
    private int age;
    //忽略getter and setter ....
}
public class MyAnnoDemo {
    public static void main(String[] args) {
        Class personClass = Person.class;
        Field[] fields = personClass.getDeclaredFields();    //获取类的所有属性

        for(Field field :fields){
            String fieldName = field.getName();              //获取属性名称

            if(field.isAnnotationPresent(Description.class)){  //如果存在Description注解
                Description personDesc = field.getAnnotation(Description.class);
                String desc =  "字段描述:" + personDesc.desc() + ";创建人:" + personDesc.author();
                System.out.println("属性-"+ fieldName + "的描述信息是:" + desc);
            }
        }
    }
}

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值