javaSE -- 注解学习笔记

参考资料:https://blog.csdn.net/KingBoyWorld/article/details/105337011

                  https://blog.csdn.net/qq_42843172/article/details/107293408

1.注解是什么?

java注解是一个写在接口、类、属性方法上的一个标签。跟注释不同,能够影响代码。

注解在代码运行时可以被反射读取并进行相应操作,从而影响到正常运行结果。


卧槽,你看  @SpringBootApplication @EnableGlobalMethodSecurity  我在springboot启动里,多加了个注解,已运行就报错,还tm不显示原因。

 元数据和注解

什么是元数据?

从java来看,元数据就是用于提供 类、方法、属性 等其他程序元素的额外信息。本身并不属于代码的一部分。

而,注解呢,就是元数据的载体。

我么设置注解,被jvm读取到,根据我们注解的信息,利用反射给我们进行数据修改。

注解和反射

我们知道,jvm不会自动为我们通过反射机制来创建对象,需要我们手写反射API,被他读取到创建。我们拿到class对象,同样也能拿到他的相应注解。

在许多框架中,有个好处,基本都有默认实现。但是我们要去实现某个功能的自定义实现,需要我们去实现或继承他预留的一个接口,通过反射+注解,拿到我们自定义的对象,因为我们遵守了他的预留接口规范,进而调用其中的方法。

举例spring框架:模拟spring利用反射动态创建携带@Compont注解的对象_帅气的黑猫杰克的博客-CSDN博客

2.为什么要使用注解?

javaSE -- 注解学习笔记_第1张图片

 xml也是一种元数据,本身并不属于代码的一部分,但是呢?却能够影响我们代码。spring通过读取配置文件中的信息,再利用反射创建需要控制反转的对象。

缺点:整个项目的配置信息都写在这个配置文件里,是集中式配置,但是文件多了,变得很复杂。

现在,提倡解耦(比如:一个类和一个类的,关系小),而注解呢是分布式配置,满足这个需求。

3.注解的作用

我们在使用一些框架是,用注解用的比较多。

开发者的视角可以解读出这个类/方法/属性的作用以及该怎么使用,而从框架的视角则可以解析注解本身和其属性实现各种功能编译器的角度则可以进行一些预检查(@Override)抑制警告(@SuppressWarnings)

  • 作为特定标记,用于告诉编译器一些信息
  • 编译时动态处理,如动态生成代码
  • 运行时动态处理,作为额外信息的载体,如获取注解信息

4.注解的分类

元注解 : java内置的注解,标明该注解的使用范围、生命周期等。

标准注解  : Java提供的基础注解,标明过期的元素/标明是复写父类方法的方法/标明抑制警告

第三方注解 :  第三方定义的注解,含义和功能由第三方来定义和实现。

4.1元注解

用于定义注解的注解,通常用于注解的定义上,标明该注解的使用范围、生效范围等。元XX 都代表最基本最原始的东西,因此,元注解就是最基本不可分解的注解,我们不能去改变它只能使用它来定义自定义的注解

一般包括这5种,

 @Retention、@Target、@Documented、@Inherited、@Repeatable,其中最常用的是@Retention和@Target下面分别介绍一下这五种元注解。

太多了,我截取关键的部分 。

1. @Retention

javaSE -- 注解学习笔记_第2张图片

注释自定义注解要保留下面那个时期。

java代码到运行的周期 : 源文件 - Class - 运行时数据

一共3个值,SOURCE - CLASS - RUNTIME

 如:以下代码,他能保留到运行时。


@Target({ElementType.TYPE}) // 声明自定义注解注解类型
@Retention(RetentionPolicy.RUNTIME) // 保留声明周期
public @interface MyAnnotation {

}

2.@Target

javaSE -- 注解学习笔记_第3张图片

 就是,定义注解能用在java那些元素上,类....,field、method、package、方法参数等等。

我的理解是反射能拿到,他都能拿到。

 3.@Inherited 

表明自定义注解是否能被继承。

4.@Repeatable

javaSE -- 注解学习笔记_第4张图片

 这个就是可重复性使用了,

@Repeatable(MyAnnotations.class) // 引用存放你重复使用的容器

5.@Documented

是否在生成的JavaDoc文档中体现,被标注该注解后,生成的javadoc中,会包含该注解,这里就不做演示了。

4.2 标准注解

javaSE -- 注解学习笔记_第5张图片

 java内置的注解,只不过是在元注解的基础上开发的。

不只有这三个,看一下即可。

 剩下的,涉及很多底层原理,对于我的使用状况,现阶段搞清楚框架是如何通过反射注解拿到我的自定义对象即可。

我们在日常学习中,其实自定义注解用得不多,也就是框架用的多!

你可能感兴趣的:(Java,学习,java,mybatis)