java SE 中的注解:
一, 注解分类:
1. 由编译器使用的注解
例如:
@Override: 让编译器检查该方法是否正确地实现了覆写;
@SuppressWarnings: 告诉编译器忽略此处代码产生的警告.
@Deprecated: 该注解标注的内容, 表示已过时
这类注解不会被编译进入. class 文件, 它们在编译后就被编译器扔掉了.
2. 由工具处理. class 文件使用的注解
比如有些工具会在加载 class 的时候, 对 class 做动态修改, 实现一些特殊的功能.
这类注解会被编译进入. class 文件, 但加载结束后并不会存在于内存中. 这类注解只被一些底层库使用, 一般我们不必自己处理.
3. 在程序运行期能够读取的注解, 它们在加载后一直存在于 JVM 中, 这也是最常用的注解.
例如, 一个配置了 @PostConstruct 的方法会在调用构造方法后自动被调用(这是 Java 代码读取该注解实现的功能, JVM 并不会识别该注解)
二, 自定义注解:
格式:
元注解
public @interface 注解名称{
属性列表;
}
三, 元注解:
有一些注解可以修饰其他注解, 这些注解就称为元注解(meta annotation)
@Target: 描述注解能够作用的位置
ElementType.TYPE: 可以作用于类上
ElementType.METHOD: 可以作用于方法上
ElementType.FIELD: 可以作用于成员变量上
ElementType.CONSTRUCTOR: 可以作用在构造方法上
ElementType.PARAMETER: 可以作用在方法的参数上
@Retention: 定义了 Annotation 的生命周期
RetentionPolicy.SOURCE: 仅编译期
RetentionPolicy.CLASS: 仅 class 文件
RetentionPolicy.RUNTIME: 运行期
SOURCE 类型的注解主要由编译器使用, 因此我们一般只使用, 不编写.
CLASS 类型的注解主要由底层工具库使用, 涉及到 class 的加载, 一般我们很少用到.
只有 RUNTIME 类型的注解不但要使用, 还经常需要编写.
@Inherited: 定义子类是否可继承父类定义的 Annotation.
@Inherited 仅针对 @Target(ElementType.TYPE)类型的 annotation 有效, 并且仅针对 class 的继承, 对 interface 的继承无效.
@Documented: 描述注解是否被抽取到 API 文档中
@Repeatable: 描述这个元注解修饰的 Annotation 是否可重复.
SpringBoot 中注解的分析:
这是每一个 springboot 项目的启动类, 通过这个 @SpringBootApplication 这个注解就将整个项目启动起来了, 咱们来看看这个注解到底是怎么做到的:
不难发现跟我们上边说的声明一个注解的方式一样, 咱们把元注解删掉再看
就只剩下 @SpringBootConfiguration,@EnableAutoConfiguration 和 @ComponentScan, 也可以说 @SpringBootApplication 就是这个三个注解
[email protected]:
看图这个注解是由 @Document 和 @Configuration 组成的.
从图中不难看出 @Document 是一个空的注解不用关心, 而我们关系的则是 @Configuration, 而在图中我们可以看到了我们熟悉的 @Component 这个注解, 在 Spring 框架中看见过是用来把普通 pojo 实例化到 spring 容器中, 相当于配置文件中的 < bean id=""class=""/>.[email protected](核心)
图中可以看出是由 @AutoConfigurationPackage 和 @Import 组成
从图中可以看 @AutoConfigurationPackage 这个注解也被 @Import 所用到, 咱们单独看这个 @Import, 字面意思是导入的意思, 导入什么那, 看传入的值 AutoConfigurationImportSelector.class, 这个类是做什么的
经过代码的分析我们发现一个 spring.factories 的文件这里边是我们启动代码时所用的类的全路径都放到了这个文件中.
[email protected]作用: 扫描并注册带 @Component 以及扩展的标注 (如 @Controller,@Service,@Respository 等) 的类
来源: http://www.bubuko.com/infodetail-3493130.html