Java注解一 注解的含义
在学习Spring框架的时候就觉得注解很神奇,为什么简单的注解有这么神奇的功能,一直想去了解其中的奥秘,可惜的是到今天才实践。在Spring框架中一个@Controller
就可以把一个简单的类变得神奇,我一直以为这个注解干了所有的事。然而并非我想的那样。
找了不少资料,感觉讲的都不是很好,终于看到了《java核心技术2》这本书才了解了一些。 在本书中提及: 注解是插入到源代码中使用其他工具可以对其进行处理的标签。 注解并不会改变代码,而是这些工具产生了这些所用,所以没有工具处理的注解也不会发挥效用。这些工具可以在源代码的层次上进行操作,或者是可以处理在其中放置了注解的类文件。
注解可以使用在
- 附属文件的自动生成。例如部署描述符或者bean信息类。
- 测试、日志、事务语义等代码的自动生成。
在Java中自带了几个注解,这些注解是为了注解别的注解,所以称为meta注解。
其中包括了
- @Retention:这个注解注在其他注解上,并用来说明如何存储已被标记的注解。可能的值是:
- SOURCE:表明这个注解会被编译器忽略,并只会保留在源代码中。
- CLASS:表明这个注解会通过编译驻留在CLASS文件,但会被JVM在运行时忽略,正因为如此,其在运行时不可见。
- RUNTIME:表示这个注解会被JVM获取,并在运行时通过反射获取
- @Target:这个注解用于限制某个元素可以被注解的类型。例如:
- ANNOTATION_TYPE 表示该注解可以应用到其他注解上
- CONSTRUCTOR 表示可以使用到构造器上
- FIELD 表示可以使用到域或属性上
- LOCAL_VARIABLE表示可以使用到局部变量上。
- METHOD可以使用到方法级别的注解上。
- PACKAGE可以使用到包声明上。
- PARAMETER可以使用到方法的参数上
- TYPE可以使用到一个类的任何元素上。
- @Documented:被注解的元素将会作为Javadoc产生的文档中的内容。注解都默认不会成为成为文档中的内容。这个注解可以对其它注解使用。
- @Inherited:在默认情况下,注解不会被子类继承。被此注解标记的注解会被所有子类继承。这个注解可以对类使用。
- @Deprecated:说明被标记的元素不应该再度使用。这个注解会让编译器产生警告消息。可以使用到方法,类和域上。相应的解释和原因,包括另一个可取代的方法应该同时和这个注解使用。
- @SuppressWarnings:说明编译器不会针对指定的一个或多个原因产生警告。
- @Override:向编译器说明被注解元素是重写的父类的一个元素。在重写父类元素的时候此注解并非强制性的,不过可以在重写错误时帮助编译器产生错误以提醒我们。比如子类方法的参数和父类不匹配,或返回值类型不同。
- @SafeVarargs:断言方法或者构造器的代码不会对参数进行不安全的操作。在Java的后续版本中,使用这个注解时将会令编译器产生一个错误在编译期间防止潜在的不安全操作。
本次只是简单的介绍了注解,后续会讲解怎么自定义注解和一些例子。
由于jekyll的环境非常难维护,所以转转阵营了,blog换为Hexo的了,而且换了主题。博客的地址是http://www.lushunming.com.cn ,我的博客中的排版更为美观,欢迎大家去看我的博客,也可以用邮箱订阅。