<Java> java注解介绍

前言

  在刚学java web开发的时候,我第一次看到注解不是在java里,而是在spring里,于是很长一段时间里,我都认为注解是spring特有的技术,后来用到mybatis的时候,发现也有不少注解,再加上经常在java中看到的@Override之类的,才怀疑注解是不是java的东西。可是怀疑归怀疑,但是开发都快一年多了,从来没有想过去了解注解这个东西,更别说开发自己的注解了。

Java注解介绍

  近来,项目中有许多额外的xml文件,我一直认为这是非常不好的,联想到spring可以将applicationContext.xml中的东西用注解写进类中,于是在想是不是也可以试试开发自己的注解。

  首先,来看java里面的annotation包。

  

  从IDE的标志就可以看出来,有四个注解隐藏在其中,这四个注解正是java的元注解,也就是”注解的注解“。它们依次是:

  1.Document:没有参数,就是表明将这个注解包含在javadoc中

  2.Inherited:没有参数,表明可以被继承

  3.Retention:有参数(可选项就在下一个RerentionPolicy中),表明该注解可以被什么级别保存

        1.Source:源码级别,也就是说这个注解就是给编译器看看的,看完就扔了,不会被编译,也就是在.class文件中是找不到的,比如@Override

        2.Class:能在class文件中找到,但是在VM运行时是找不到的。这个是默认级别。

        3.Runtime:在VM运行时都能保留,因此可以通过java反射机制来读取注解信息,一般来说这个用的最多。比如:@Value、@Controller、@Bean

  4.Target:有参数(可选项在ElementType中),表明该注解可以被放在类的哪个层面上,默认是全部。

  有了这几个,就已经可以开发自己的注解了,试一下:

@Retention(RetentionPolicy.RUNTIME)
public @interface Info {
    String book() default "";
}

public class Book {
    @Info(book = "Thinking in java")
    String bookName;

    public String getName(){
        return bookName;
    }

    public static void main(String[] args) {
        Field[] fields = Book.class.getDeclaredFields();
        for (Field field : fields){
            if(field.isAnnotationPresent(Info.class)){
                Info info = field.getAnnotation(Info.class);
                Book book = new Book();
                book.bookName = info.book();
                System.out.println(book.getName());
            }
        }
    }
}  

  简单到爆,当然稍微需要有点java的反射基础知识。一般我们用spring,mybatis之类的框架注解时,不用写这些解析反射的代码,是因为框架帮我们做好了。

时间: 2024-08-02 12:03:39

<Java> java注解介绍的相关文章

Java注解介绍

原文链接: Java Annotations: An Introduction原文日期: 2005年10月14日翻译日期: 2014年07月20日翻译人员: 铁锚 翻译完后,感觉这篇文章是不是在http://www.developer.com被挖坟了? Java注解介绍 基于注解(Annotation-based)的Java开发无疑是最新的开发趋势.[译者注: 这是05年的文章,在2014年,毫无疑问,多人合作的开发,使用注解变成很好的合作方式,相互之间的影响和耦合可以很低]. 基于注解的开发将

【JAVA】java注解的自定义和使用

java注解概念 Java提供了一种原程序中的元素关联任何信息和任何数据的途径和方法 java注解介绍 常用注解 @Override:表示方法是重写的方法 @Deprecated:过时的方法 @SuppressWarnings:抑制警告 注解分类 按照运行机制分 1.源码注解:注解只在源码中存在,编译成.class文件就不存在了 2.编译时注解:注解在源码和.class文件中都存在,如@Override 3.运行时注解:在运行阶段起作用,甚至会影响运行逻辑,如@Autowired 按照来源分 1

Java注解(3)-注解处理器(编译期|RetentionPolicy.SOURCE)

注解的处理除了可以在运行时通过反射机制处理外,还可以在编译期进行处理.在编译期处理注解时,会处理到不再产生新的源文件为止,之后再对所有源文件进行编译. Java5中提供了apt工具来进行编译期的注解处理.apt是命令行工具,与之配套的是一套描述"程序在编译时刻的静态结构"的API:Mirror API(com.sun.mirror.*).通过Mirror API可以获取到被注解的Java类型元素的信息,从而提供自定义的处理逻辑.具体的处理工具交给apt来处理.编写注解处理器的核心是两个

19.Java 注解

19.Java注解 1.Java内置注解----注解代码 @Deprecated                                    //不推荐使用的过时方法 @Deprecated public void badMethod(){ System.out.println("I am a old function"); } @Override                                        //必须是覆盖父类(接口)的函数 @Overrid

spring注解说明之Spring2.5 注解介绍(3.0通用)

spring注解说明之Spring2.5 注解介绍(3.0通用) 注册注解处理器 方式一:bean <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> 方式二:命名空间 <context:annotation-config /><context:annotationconfig /> 将隐式地向Spring容

深入理解Java注解类型(@Annotation)

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 深入理解Java注解类型(@Annotation) - zejian的博客 - 博客频道 - CSDN.NET zejian的博客 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯]流畅的Python,终于等到你!    &am

10分钟学会JAVA注解(annotation)

(原) 先认识注解(Annotation) 定义类用class,定义接口用interface,定义注解用@interface 如public @interface AnnotationTest{} 所有的注解类型都自动的继承于java.lang.annotation.Annotation接口 Annotation接口文档中这样描述:所有注解类型都扩展于这个公共的接口,注意,一个接口, 手动的继承了这个接口,并不意味着它是一个注解类型.换句话说,这个接口本身不是一个注解类型. 注意:这里Annot

Java注解实践

Java注解实践 注解对代码的语意没有直接影响, 他们只负责提供信息给相关的程序使用. 注解永远不会改变被注解代码的含义, 但可以通过工具对被注解的代码进行特殊处理. JDK 基本Annotation 注解 说明 @Override 重写 @Deprecated 已过时 @SuppressWarnings(value = "unchecked") 压制编辑器警告 @SafeVarargs 修饰"堆污染"警告 @FunctionalInterface Java8特有的

java 注解——使用详解

在一些强大的第三方框架中我们常常可以见到注解的身影.xUtils.Retrofit等. 那么注解到底有什么魅力和好处让我们在设计种种框架的时候用到它呢? 对于注解的理解: (仅仅为个人理解) 1,我们通过注解给某个常量.方法或者类一个标记.那么这些常量就有了某种特征或者某种标记. 2,这些标记不参与我们的逻辑处理.这也是为什么它会写在方法或者类的外面的原因. 3,但是我们可以通过获取方法上的标记即注解来间接的影响程序的逻辑. 4,注解是被动的,它影响程序取决于程序员是否去使用它. 由此看来,注解