java自定义注解以及注解的简单介绍

来源:互联网 发布:淘宝证书怎么下载 编辑:程序博客网 时间:2024/06/07 14:40
jdk自带注解
@Override 覆盖父类的方法
@Deprecated  注解一个方法 表示该方法过时了
@Suppvisewarnings     @SupressWarnings("deprecation")//忽略警告

常见第三方注解
Spring:
@Autowired   自动生成一个类的实例
@Service
@Repository



Mybatis:
@InsertProvider
@UpdateProvider
@Options

注解的分类
运行机制化分
源码注解 注解只在源码中出现 class文件就没有了
编译注解  在源码和.class 文件中都存在
运行注解  运行阶段起作用 影响程序的运行逻辑


来源来分
jdk注解
第三方的注解
自定义的注解

元注解 注解的注解


自定义注解
语法要求
元注解
@Target(ElementType.METHOD,ElementType.TYPE) //注解的作用域 可以用在 CONSTRUCTOR构造方法声明 FIELD字段声明 LOCAL_VARIABLE局部变量 METHOD方法声明 PACKAGE包声明 PARAMETER参数声明 TYPE类接口
@Retention(RetentionPolicy.RUNTIME) 生命周期SOURCE 在源码时显示 编译被丢弃  CLASS 编译时记录到class中,运行时忽略 RUNTIME 运行时存在,可以通过反射获取
@Inherited   允许子类继承  继承只会继承类上面的注解 不会继承方法上的注解
@Documented  生成javadoc包含注解信息
public @interface Description{
    String desc();
    String author();
    int age() default 18;
}

使用@interface关键字定义注解
成员以无参无异常方式声明
可以用defalut成员指定默认值
成员类型包括原始类型 以及String class Annotation Enumeration
如果注解只有一个成员,则成员名必须取名为value() ,在使用时可以忽略成员名和赋值号=
注解类可以没有成员 成为标识注解


使用注解
@Description(desc="gac",autor="gac1",age=18)
public String eyeColor(){
    return "red";
}


解析注解
通过反射获取类,函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑

public class ParseAnn{
    //使用类加载器加载类 获得类上的注解
    try{
        Class c = Class.forName("com.ann.test.Child");//这个类使用了定义的注解  
        //2.找到类上面的注解
        boolean isExists = c.isAnnotationPresent(Description.class);
        if(isExits){
            //拿到注解实例
            Description d = (Description)c.getAnnotation(Description.class);
            System.out.println(d.value());
        }






                //找到方法上的注解
        Method[] ms = c.getMethods();
        for(Method m:ms){
            boolean isMExits = m.isAnnotationPresent(Description.class);
            if(isMExits){
                Description d = (Description)m.getAnnotation(Description.class);
                System.out.println(d.value());
            }
        }




        //另外一种解析方法
        for(Method m : ms){
            Annotation[] as = m.getAnnotations();
            for(Annotation a:as){
                if(a instanceof Description){
                    Description d = (Description)a;
                    System.out.println(d.value());
                }
            }
        }
    }catch(ClassNotFoundException e){

        e.printStackTrace();
    }

    
}
































0 0
原创粉丝点击