Java基础——自定义Annotation

来源:互联网 发布:sql编写存储过程 编辑:程序博客网 时间:2024/06/08 14:18

         现如今的java开发中,我们用到了大量的注解,省去配置文件的编写,简化操作,便于开发,那么注解是什么?怎么用?

          百度百科:“注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK5.0及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

          维基百科:“is a form of syntactic metadatathat can be added to Java source code.”意思是Annotation的引入是为java源代码提供元数据的支持

          问题来了,什么是元数据?

          维基百科:“data about data”。意思是描述数据的数据。如果我们把Java的源代码看做是数据的话,那么metadata就是为了描述这些源代码而产生和使用的元数据,Annotation就是在Java语言层面上实现了metadata机制。


 AnnotationJava中的应用

 

     AnnotationJava可以像public, final等语法修饰一样使用,用以修饰用于包、类型、构造方法、方法、成员变量、参数、本地变量的声明中。另外对于允许自定义参数的Annotation还可以在声明中使用参数。

    Java中主要用在以下几个方面:

     文档编制

                  通过@Documented来标注是否需要在javadoc中出现。

     编译器检查

                  通过Annotation的使用,可以调整和控制编译器的使用以及让编译器提供关于代码的更多的检查和验证,比如@Override,@SuppressWarning.

    代码分析

                 这个是我们开发者从中受益良多的部分,通过Annotation的使用,可以让我们在代码运行中动态得去控制系统的行为,从而省去之前诸多的配置和冗余代码。这里有一点需要说明的是,Annotation不影响已有代码的执行,但是会影响系统在运行中的行为,这两个在不同的层面上,一个是已有的代码执行层,另外一个是JVM会根据Annotation的指令修改系统行为的。

 

 AnnotationJava中的使用方法

public classAnnotationOverrideTest {      @Override public StringtoString() { /////---  可以当做修饰符一样直接使用         return "Override the toString()of the superclass";      }      @Override  //也可以分为单独一行      public StringtoString123() {  //提示编译错误          return "Override the toString()of the superclass";      }   }  

    大家可以看到@+Annotation的名称就可以直接使用了,这里使用了@Override这个Annotation来让编译器检查toSring()这个方法是否覆盖了基类的方法。如果基类并没有这个方法的话,则会报错。toString123()这个方法中,就会提示错误信息:

AnnotationOverrideTest.java:7:method does not override or implement a method from a super-type 

   @Override public String toString123() { 

   ^ 

   这个@Override可以帮助我们的攻城师尽可能早的发现代码中隐藏的问题,如果未使用它的话,可能只有在运行过程中,才会有机会发现这个问题

 

自定义Annotation

定义注解代码:

@Inherited@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface Arguments {    String[] value() default {};}


 使用注解代码:

 @Arguments({"empno","name"})    Map getMap(String empno,String name);


       定义了注解,并在需要的时候给相关类,类属性加上注解信息,如果没有响应的注解信息处理流程,注解可以说是没有实用价值。如何让注解真真的发挥作用,主要就在于注解处理方法。

一些需要注意的地方:

1、注解中的方法不能定义参数。

2、注解当中定义的方法不能定义抛出异常。

 

总结:

       使用自定义注解的地方很多,常见于一些主流应用框架中,如springMVC、orm框架hibernate与mybatis。使用注解可以使系统的配置更加灵活,但同时也增加了结构的复杂性,所以要综合考虑是否使用。

0 0
原创粉丝点击