1: 注解:Annotation是一种应用于类、方法、参数、变量、构造器及包生命中的特殊修饰符,是一种由JSR-175标准选择用来描述代码的元数据。

Java中如下的4种注解,专门负责新注解的创建:

  @Target - 注解应用于什么地方如果不明确指出,则改注解可以放在任何地方。

  @Inherited - 是否允许子类继承该注解。

  @Retention - 什么时候使用该注解定义该注解的生命周期;RetentionPolicy.CLASS表示在类加载的时候丢弃,在字节码文件的处理中有用,注解默认都使用这种方                                 式。RetentionPolicy.RUNTIME表示始终不对丢弃,运行期也保留该注释,因此可以使用反射机制读取该注解的信息。我们自定义的注解通常使用这种                               方式,比如spring的一些注解。

  @Documented - 注解是否包含在JavaDoc中一个简单的标记注解,标识是否将注解信息添加在java文档中

java内置的常用注解:

@Override,表示当前的方法定义将覆盖超类中的方法。

@Deprecated,使用了注解为它的元素编译器将发出警告,因为注解@Deprecated是不赞成使用的代码,被弃用的代码。

@SuppressWarnings,关闭不当编译器警告信息。

自定义注解:

1 @Target(ElementType.METHOD)
2 @Retention(RetentionPolicy.RUNTIME)
3 public @interface Test {
4
5 }

除了@符号,注解很像是一个接口。定义注解的时候需要用到元注解,上面用到了@Target和@RetentionPolicy。

在注解中一般会有一些元素以表示某些值。注解的元素看起来就像接口的方法,唯一的区别在于可以为其制定默认值。没有元素的注解称为标记注解,上面的@Test就是一个标记注解。

在注解中一般会有一些元素以表示某些值。注解的元素看起来就像接口的方法,唯一的区别在于可以为其制定默认值。没有元素的注解称为标记注解,上面的@Test就是一个标记注解。

  注解的可用的类型包括以下几种:所有基本类型、String、Class、enum、Annotation、以上类型的数组形式。元素不能有不确定的值,即要么有默认值,要么在使用注解的时候提供元素的值。而且元素不能使用null作为默认值。注解在只有一个元素且该元素的名称是value的情况下,在使用注解的时候可以省略“value=”,直接写需要的值即可。

使用注解最主要的部分在于对注解的处理,那么就会涉及到注解处理器

从原理上讲,注解处理器就是通过反射机制获取被检查方法上的注解信息,然后根据注解元素的值进行特定的处理。

  首先最重要的一点是:Annotation是被动的元数据,永远不会有主动行为

  但凡Annotation起作用的场合都是有一个执行机制/调用者通过反射获得了这个元数据然后根据它采取行动。在你的例子里这个执行机制就是测试框架JUnit。你去 慢慢翻JUnit的代码一定能找到它去查询被调用的class有没有某某Annotation,然后如果有就怎么怎么样的代码

最新文章

  1. ScrollView
  2. js 中与元素有关的高度
  3. Shell脚本检测文件夹是否已被挂载的方法
  4. asp.net LINQ LinqDataSource控件显示数据和DropdownList显示数据
  5. UNIX网络编程学习指南--epoll函数
  6. CheckStyle, 强制你遵循编码规范
  7. ISymbol
  8. Install Hive
  9. mfc 可编辑 list control
  10. Scrum团队成立,阅读《构建之法》第6~7章,并参考以下链接,发布读后感、提出问题、并简要说明你对Scrum的理解
  11. Centos7升级gcc学习笔记
  12. insert into (select...WITH CHECK OPTION) values(...)
  13. 怎样在WINDOWS下面编译LIBCURL
  14. 利用python分析nginx日志
  15. 『重构--改善既有代码的设计』读书笔记----Move Field
  16. MySQL 元数据
  17. 观察者模式(observer行为)c#简单的例子
  18. http请求报文格式和响应报文格式
  19. springboot+springmvc+mybatis项目整合
  20. Golang go get第三方库的坑

热门文章

  1. 拉普拉斯分布(Laplace distribution)
  2. scala语法解析(解码指环)
  3. 【HTTP】HTPP学习笔记
  4. Qt Creator 调试器 在 Ubuntu 13.10下 局部变量和表达式(Locals) 无内容
  5. (转载)C#格式规范
  6. 牛客小白月赛1 C 分元宵【快速幂】
  7. Mysql的空值与NULL的区别
  8. RabbitMQ之Exchange Topics模式
  9. kafka常用的shell命令
  10. EntityFramework 学习 一 Querying with EDM 从EDM查询