Java注解annotation学习记录

一、注解概念:

注释:给人看的信息,人看了提示信息了解程序的内容。 eg: //  /* */ /** */

注解:给程序看的提示信息,JDK1.5开始提供的新特性。程序看后可根据有无注解及注解上属性的不同配置执行不同的逻辑。 Java中的注解格式:@AnnoName(key = value, ...)

*注解在开发中,可以作为轻量级配置来使用,比起实用xml作为配置文件,更加的轻便易用,在Java开发中大量使用。 --- @Bean  @Select  @Resource ...

二、jdk三种内置注解:

1.@Override:声明重写父类方法的注解,要求编译器帮我们检查是否成功的覆盖,如果没有成功覆盖方法,编译器将会进行报错提示。

2.@Deprecated:声明方法被过时,不再建议使用,要求编译器在编译的过程中对于这样的方法的调用提出警告,提示方法过时。

3.@SuppressWarnings:压制警告,提示编译器,在编译的过程中对指定类型的警告不再提示。 --- 自动忽略警告

三、自定义注解开发:

四、元注解:给注解 注解 的 注解

1.开发一个注解类,非常类似于开发一个接口,只不过需要通过@interface关键字来声明。 

    eg: public @interface log{  }

2.使用元注解修饰注解的声明:所谓的元注解是用来修饰注解声明的注解,可以控制被修饰的注解的特性。

a.@Target:被修饰的注解可以用在什么位置。

    @Target(ElementType.TYPE)——接口、类、枚举、注解

    @Target(ElementType.FIELD)——字段、枚举的常量

    @Target(ElementType.METHOD)——方法

    @Target(ElementType.PARAMETER)——方法参数    

    @Target(ElementType.CONSTRUCTOR) ——构造函数

    @Target(ElementType.PACKAGE)——包

可以修饰多个位置@Target({ ElementType.METHOD, ElementType.TYPE })


其中@Target( ElementType.PACKAGE)是注解在package-info.java中的。package-info.java详细说明

b.@Retention:用来声明被修饰的注解会被保留到什么阶段。

    @Retention(RetentionPolicy.SOURCE):注解在源码时有效,将会被编译器抛弃。

SOURCE一般用于标记,比如javadoc,或为了其他人易于理解你的程序,如@Override。

    @Retention(RetentionPolicy.CLASS):注解在编译时有效,但在运行时没有保留。这也是默认行为。class文件中保留注解

    @Retention(RetentionPolicy.RUNTIME):运行时有效,并且可以通过反射获取。

class文件里面的东西由类加载器加载到内存中去,类加载器在加载class文件时,会对class文件里面的东西进行处理,如安全检查,处理完以后得到的最终在内存中的二进制的东西才是字节码,类加载器在把class文件加载到内存中时也有转换,转换时是否把class文件中的注解保留下来?class范围不保留,runtime则保留

    这3个生命周期分别对应于:Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码。

运行时注解是通过反射来实现注解处理器的,对性能稍微有一点损耗,而编译时注解是在程序编译期间生成相应的代理类,替我们完成某些功能。

c.@Documented:用来声明被修饰注解是否要被文档提取工具提取到文档中。默认不提取。

@Documented 可以被例如 javadoc此类的工具文档化,Documented是一个标注注解,没有成员

d.@Inherited:被修饰的注解是否有继承性。默认没有继承性

使用两个类继承验证@Inherited
结论:类继承关系中,子类会继承父类使用的注解中被@Inherited修饰的注解
接口继承接口验证@Inherited
类实现接口验证@Inherited
结论:接口继承关系中和实现接口关系中,子接口(子类)不会继承/实现父接口中的任何注解,不管父接口中使用的注解有没有被@Inherited修饰

3.为注解增加属性:注解类中声明的属性必须是public的,可以显示声明,也可以不声明,不声明默认就是public的

注解类中的属性只能是八种基本数据类型、String类型、Class类型、枚举类型、其它注解类型及以上类型的一维数组

注解中声明的属性,需要在注解时为其赋值,赋值的方式就是在使用注解时,在注解后跟一对小括号,在其中通过 属性名=属性值 的方式指定属性的值

也可以在声明注解时,在注解的属性后通过 default关键字 声明属性的默认值,声明过默认值的属性,在使用注解时不指定属性则使用默认值,如果指定,则覆盖默认值

如果属性是 一维数组类型 而在传入的数组中 只有一个值 则包括数组的大括号可以省略

如果注解的属性 只有一个需要赋值 且该属性的名称叫做value 则在使用注解时 value= 可以不写

五、反射注解:

1.原理:RententionPolicy.RUNTIME级别的注解回保留到运行期,可以通过反射技术获取,从而可以根据是否有注解 或 注解属性值的不同控制程序按照不同方式运行

a.isAnnotationPresent():如果指定类型的注释存在此元素上,则返回true,否则返回false

b.getAnnotation():如果存在该元素的指定类型的属性值,则返回这些属性,否则返回null

c.getAnnotations():返回此元素上存在的所有属性值

六、Spring的五大通知类型

a. 前置通知 @Before:在目标方法执行之前执行执行的通知

b. 环绕通知 @Around:在目标方法执行之前和之后都可以执行额外代码的通知。

c. 后置通知 @AfterReturning:在目标方法执行之后执行的通知。

d. 异常通知 @AfterThrowing:在目标方法抛出异常时执行的通知

e. 最终通知 @After:是在目标方法执行之后执行的通知。

eg:


无异常情况下:

有异常情况下


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容