java注解介绍和自定义注解实例

JDK1.5引入了注解。

  • 按来源分类:
    自带注解
    第三方注解
    自定义注解

自带注解:例如Override,Deprecated,Suppvisewarnnings。
Override是来标识重写的,如果没有重写,就会报错。
Deprecated是用来标识过时的方法,如果使用的话会有风险提示,并划横线,使用Suppvisewarnnings就可确认使用,消除风险提示。

第三方注解:例如Spring当中的Autowired,Service,Resource,Repository.Mybatis当中的InsertProvider,Updateprovider,Options等等。

自定义注解:public @interface [注解名].

  • 按运行机制分类:
    源码注解
    编译时注解
    运行时注解

源码注解:在源码的时候存在,编译成class文件则消失
编译时注解:源码存在,编译成class文件也存在
运行时注解:要对程序运行有作用,例如Autowired注解就可以自动装配实例。

  • 自定义注解实例:
/**
@author:micro_hz
2015年8月21日
 */
//Target目标,定义注解起作用的范围,这里定义了Method和类上的作用
@Target({ElementType.METHOD,ElementType.TYPE})
//注解可以继承
@Inherited
//注解注解的运行机制
@Retention(RetentionPolicy.RUNTIME)
//注解生成文档时候保留注解
@Documented
public @interface Description {
    //如果只有一个注解,必须是value,这个时候使用注解的的时候不用写参数value名和"=",直接写内容Description("")
    String value();
}
  • 我们在普通的类中使用该自定义注解
package annotation.test;
/**
@author:micro_hz
2015年8月21日
 */
//在类上使用了我们自定义的注解
@Description("this is a class Annotation")
public class AnnotationTest {
    //在方法上使用我们自定义的注解
    @Description("this is a method Annotation")
    @Deprecated//使用该注解表示该方法已经过时
    public void deprecatedMethod()
    {
        System.out.println("i am a Deprecated Annotation method");
    }
    public void p()
    {
        System.out.println("this is a AnnotationTest class");
    }
}

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

/**
@author:micro_hz
2015年8月21日
 */
public class Test {
    @SuppressWarnings("deprecation")
    public static void main(String args[])
    {
        //若使用Deprecated注解的方法,会警告,添加SuppressWarnnings即可确认使用,消除风险
        AnnotationTest annotationTest = new AnnotationTest();
        annotationTest.deprecatedMethod();

        try {
            //获得类上的注解内容
            //使用类加载得到这个类
            Class<?> c = Class.forName("annotation.test.AnnotationTest");
            //判断这个类是否存在Description这个注解
            if(c.isAnnotationPresent(Description.class))
            {
                //若存在即打印出来这个类的value注解值
                Description d = (Description) c.getAnnotation(Description.class);
                System.out.println(d.value());
            }

            //获得方法上的注解内容
            /*
             * 方法1
             */
            //获得所有的方法
            Method[] methods = c.getMethods();
            //遍历所有的方法
            for(Method m : methods)
            {
                //获得每个方法的所有注解
                Annotation[] as = m.getAnnotations();
                //遍历每个注解
                for(Annotation a : as)
                {
                    //如果注解为Description类型,打印出value
                    if(a instanceof Description)
                    {
                        System.out.println(((Description) a).value());
                    }
                }
            }
            /*
             * 方法2
             */
            for(Method m : methods)
            {
                //判断方法是否有该注解,有就打印出该注解的value
                if(m.isAnnotationPresent(Description.class))
                {
                    System.out.println(((Description)m.getAnnotation(Description.class)).value());
                }
            }
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

运行结果:

i am a Deprecated Annotation method
this is a class Annotation
this is a method Annotation
this is a method Annotation
  • 工程目录
    这里写图片描述
    慕课网注解教程
    元注解作用域:
    这里写图片描述
    继承是继承类上的注解,不继承方法上的注解。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值