`
Action-人生
  • 浏览: 99503 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java注解的解释概念

    博客分类:
  • JAVA
阅读更多
//来自于别人


一、什么是java注解
         注解,顾名思义,注解,就是对某一事物进行添加注释说明,会存放一些信息,这些信息可能对以后某个时段来说是很有用处的。
         Java注解又叫java标注,java提供了一套机制,使得我们可以对方法、类、参数、包、域以及变量等添加标准(即附上某些信息)。且在以后某个时段通过反射将标注的信息提取出来以供使用。
二、自定义Java标注
1  为什么要自定义注解
         Java从1.5版本以后默认内置三个标注:
Ø @Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。
Ø @Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.
Ø @SuppressWarnings:这一个类型可以来暂时把一些警告信息消息关闭.
但是,仅仅这三个标注是不能满足我们开发时一些需求的。所以java允许我们自定义注解来使用。
2  如何自定义注解
自定义步骤大致分为两步:
1,              通过@interface关键字(注意,不是interface,是@interace)声明注解名称,以及注解的成员属性或者叫做注解的参数。
2,              使用java内置的四个元注解对这个自定义标注的功能和范围进行一些限制
问题来了,什么是元注解?
3  什么是元注解
元注解,就是定义注解的注解,也就是说这些元注解是的作用就是专门用来约束其它注解的注解。请区别上面那三个注解,他们也是通过元注解定义而来的。
元注解有哪些呢,主要有四个@Target,@Retention,@Documented,@Inherited?
1.  * 元注解有:@Target,@Retention,@Documented,@Inherited
2.  * 
3.  *     @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:
4.  *         ElemenetType.CONSTRUCTOR 构造器声明
5.  *         ElemenetType.FIELD 域声明(包括 enum 实例)
6.  *         ElemenetType.LOCAL_VARIABLE 局部变量声明
7.  *         ElemenetType.METHOD 方法声明
8.  *         ElemenetType.PACKAGE 包声明
9.  *         ElemenetType.PARAMETER 参数声明
10. *         ElemenetType.TYPE 类,接口(包括注解类型)或enum声明
11. *         
12. *     @Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
13. *         RetentionPolicy.SOURCE 注解将被编译器丢弃
14. *         RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
15. *         RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
16. *         
17. *     @Documented 将此注解包含在 javadoc 中
18. *     
19. *     @Inherited 允许子类继承父类中的注解

4 自定义及使用注解示例
         自定义一个类级别的标注Description
package lighter.javaeye.com;
   import java.lang.annotation.Documented;
   import java.lang.annotation.ElementType;
   import java.lang.annotation.Retention;
   import java.lang.annotation.RetentionPolicy;
   import java.lang.annotation.Target;

   @Target(ElementType.TYPE)//这个标注应用于类
   @Retention(RetentionPolicy.RUNTIME)//标注会一直保留到运行时
   @Documented//将此注解包含在javadoc中
   public @interface Description {
       String value();
   }

         再定义个方法级别的注解Name
   package lighter.javaeye.com;
   import java.lang.annotation.Documented;
   import java.lang.annotation.ElementType;
   import java.lang.annotation.Retention;
   import java.lang.annotation.RetentionPolicy;
   import java.lang.annotation.Target;

    //注意这里的@Target与@Description里的不同,参数成员也不同
   @Target(ElementType.METHOD)
   @Retention(RetentionPolicy.RUNTIME)
   @Documented
   public @interface Name {
       String originate();
       String community();
   }

         然后使用以上两个注解
package lighter.javaeye.com;

@Description(value="javaeye,做最棒的软件开发交流社区")
public class JavaEyer {
         @Name(originate="创始人:robbin",community="javaEye")
         public String getName()
         {
                   return null;
         }
       
         @Name(originate="创始人:江南白衣",community="springside")
         public String getName2()
         {
                   return "借用两位的id一用,写这一个例子,请见谅!";
         }
}

说明:其中标注“@Description(value="javaeye,做最棒的软件开发交流社区")”,可以写成“@Description("javaeye,做最棒的软件开发交流社区") ”,结果也是一样的。因为Description标注定义的时候其参数(或者说属性)为value。而value比较特殊,它在被指定参数的时候可以不用显示的写出来。当然如果定义的时候参数名不是value而是其它的比如des,那么使用注解的时候,必须显示写出参数名,然后再赋值:@Description(Des=”xxx”)
                                                                                                                                              

提取出注解的信息
package lighter.javaeye.com;

import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;

public class TestAnnotation {
         /**
          * author lighter
          * 说明:具体关天Annotation的API的用法请参见javaDoc文档
          */
       public static void main(String[] args) throws Exception {
       String CLASS_NAME = "lighter.javaeye.com.JavaEyer";
       Class test = Class.forName(CLASS_NAME);
       Method[] method = test.getMethods();
       boolean flag = test.isAnnotationPresent(Description.class);
        if(flag)
        {
                 Description des = (Description)test.getAnnotation(Description.class);
                 System.out.println("描述:"+des.value());
                 System.out.println("-----------------");
        }
      
        //把JavaEyer这一类有利用到@Name的全部方法保存到Set中去
        Set<Method> set = new HashSet<Method>();
        for(int i=0;i<method.length;i++)
        {
                 boolean otherFlag = method[i].isAnnotationPresent(Name.class);
                 if(otherFlag) set.add(method[i]);
        }
        for(Method m: set)
        {
                 Name name = m.getAnnotation(Name.class);
                 System.out.println(name.originate());
                 System.out.println("创建的社区:"+name.community());
        }
     }
}

注意事项:
所有的Annotation会自动继承java.lang.annotation这一个接口,所以不能再去继承别的类或是接口.
   最重要的一点,Annotation类型里面的参数该怎么设定:
   第一,只能用public或默认(default)这两个访问权修饰.例如,String value();这里把方法设为defaul默认类型.
   第二,参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和String,Enum,Class,annotations等数据类型,以及这一些类型的数组.例如,String value();这里的参数成员就为String
分享到:
评论

相关推荐

    java高级之注解

    java高级之注解 注解的概念: 注解是JDK1.5的新特性。 注解相当一种标记,是类的组成部分,可以给类携带一些额外的信息。 注解可以加在包,类,字段,方法,方法参数以及局部变量上。 注解是给编译器看的,编译器...

    基于Java 注解(Annotation)的基本概念详解

    基于Java 注解(Annotation)的基本概念详解

    java语言注解基础概念详解

    主要介绍了java语言注解基础概念详解,具有一定借鉴价值,需要的朋友可以参考下。

    java深度历险

    JAVA注解 34 使用注解 34 开发注解 35 处理注解 35 实例分析 38 参考资料 39 JAVA反射与动态代理 40 基本用法 40 处理泛型 42 动态代理 42 使用案例 43 参考资料 44 JAVA I/O 45 流 45 缓冲区 47 字符与编码 48 通道...

    EJB注解说明

    实际上这表达了和Hibernate持久化实体对象同样的概念. 它们的映射都通过JDK5.0注解来定义(EJB3规范已经定义了对应的XML描述语法). 注解分为两个部分,分别是逻辑映射注解和物理映射注解, 通过逻辑映射注解可以描述...

    java测试新技术TestNG和高级概念

    因为它在很大程度上借鉴了Java注解(JDK5.0引入的)来定义测试,它也可以显示如何使用这个新功能在真实的Java语言生产环境中。 原文出自[易百教程] 转载请保留原文链接: https://www.yiibai.com/testng

    java最新面试题50道精讲

    8 、解释一下Java中的注解是什么,以及如何使用注解? 9 、解释一下Java中的基本数据类型和引用数据类型的区别是什么? 10、解释一下Java中的垃圾回收机制是什么,以及如何配置垃圾回收器? 11、解释Java中的基本...

    java经典面试题目-面经-java-Java语言的进阶概念-常用的库和框架-并发编程-网络编程-Web开发-面经

    什么是Java中的注解处理器?如何自定义和使用注解处理器? 什么是Java中的并发编程?列举一些常见的并发类和工具。 什么是Java中的线程池?如何创建和使用线程池? 什么是Java中的Callable和Future接口?如何使

    由浅入深 带你了解Java注解

    在学习注解之前,我首先来讲一讲学习注解的好处,不管下面看不看,先打个鸡血先。不过确定的是,在正常 JAVA 开发中,自己写注解是比较...  注解概念  JDK 5中引入了源代码中的注解(annotation)这一机制。 注解使

    廖雪峰 Java 教程.doc

    廖雪峰 Java 教程 ...基本概念 Date和Calendar LocalDateTime ZonedDateTime DateTimeFormatter Instant 最佳实践 单元测试 编写JUnit测试 使用Fixture 异常测试 条件测试 参数化测试

    整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用-Java EE企业级应用开发学习记录(第十天)

    本资源记录了在Java EE企业级应用开发学习过程中的第十天内容,重点关注了整合Spring、Spring MVC和MyBatis(SSM框架)进行注解开发的学习和应用。通过这一天的学习,您将掌握如何构建强大的Web应用程序,同时提供了...

    spring常用注解

    Spring框架基础学习,比较适合初学者,总结了Spring相关概念

    javaOOP文档、知识点总结.CHM

    本文档总结javaOOP所有关键知识,包括java基础知识、面向对象、常用API、多线程、集合、IO、泛型、枚举、反射、注解等概念性知识。

    Spring核心注解深入解析:提升开发效率

    Spring框架是Java开发中广泛使用的一个强大工具,它通过依赖注入和控制反转等核心概念,极大地提高了开发效率和应用的可维护性。在这份文档中,我们深入探讨了Spring的核心注解,包括但不限于@Component、@...

    Java学习笔记

    概念和原理方面:线程、类库API(文档)、泛型、枚举、注解、反射、网络等 JAVA中最大的特点是面向对象,面向对象的概念最早出现在70年代,由Smaltalk(IBM)提出来的。 JAVA语言跨平台执行,它必须先编译后解释执行,...

    反射,动态代理,正则,注解

    会经常遇到对字符串进行验证的功能,而按照我们之前学习的String类,我们使用String类中的诸多函数是可以完成对字符串校验功能的,但是代码相对来说比较麻烦,所以在Java中引入正则表达式的概念来解决上述问题,即...

    java基础案例与开发详解案例源码全

    1.1 Java语言发展简史2 1.2 认识Java语言3 1.2.1 Java语言特性3 1.2.2 JavaApplet4 1.2.3 丰富的类库4 1.2.4 Java的竞争对手5 1.2.5 Java在应用领域的优势7 1.3 Java平台的体系结构7 1.3.1 JavaSE标准版8 1.3.2 ...

    2023最新整理版-java基础面试提

    java基础面试题,涵盖基础概念与常识、基本语法、基本数据类型、面向对象基础、Java常见类、异常、泛型、反射、注解、SPI、序列化和发序列化等知识点,目录清洗,共有近60个基础知识面试题以及详细答案解释,如下为...

    Java零基础-继承.md

    内容概要: 本文介绍了Java中的继承概念及其用法。读者将学习如何创建子类和父类,并了解继承的重要性和优势。通过一个图形类的示例,读者将了解如何使用关键字extends来实现类的继承,以及如何通过重写方法来实现...

    javaspring 培训教程 TP1.docx

    2. Spring IOC:介绍控制反转概念,理解 xml 配置文件以及 使用注解进行配置的方法。详细阐述了 Spring 容器的加载过程, 以及依赖注入的实现原理。并且提供了一些基于 xml 配置和注 解的实例。

Global site tag (gtag.js) - Google Analytics