This commit is contained in:
wu 2024-10-21 13:33:46 +08:00
parent c718d46fa5
commit 49757a4d90

View File

@ -44,49 +44,47 @@
参考[java注解是怎么实现的?](https://www.zhihu.com/question/24401191)
- **定义**:
> java注解又叫做java标注是java的一种注释机制在jdk5.0引入。其可以作用在类、方法、变量、参数和包上。注解是用于向编译器或框架提供元数据的一种机制。
- **注解定义的语法**
> 注解 (Annotation),也叫元数据。一种代码级别的说明。它是 JDK1.5 及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
>
> ——摘自百度百科
> 元数据: 说明数据的数据
**注解定义的语法**
```java
public @interface 注解名称{
属性列表;
}
```
- **类型**:
- **元注解**: 用于修饰其他注解。
- **内置注解**: 如`@Override`, `@Deprecated`, `@SuppressWarnings`等。
- **自定义注解**: 自定义注解就是我们自己写的注解,来满足特定需求。
- **第三方框架定义的注解**: 比如SpringMVC的@Controller等,也可归于自定义注解。
- **使用场景**:
- **元数据**: 为框架提供元数据。
- **代码生成**: 用于生成代码。
- **编译时处理**: 用于编译时的代码处理。
**类型**:
- **元注解**: 用于注解其他注解的注解,如@Retention和@Target。
- **内置注解**: Java平台提供的注解,如`@Override`, `@Deprecated`, `@SuppressWarnings`等。
- **自定义注解**: 我们自己写的注解。 很多第三方框架通过提供自定义注解来简化实现, 如spring框架提供了`@Autowired`、`@RequestMapping`等。
**使用场景**:
- 为框架提供元数据例如Spring框架使用注解来标记组件。
- 用于代码生成例如Lombok库使用注解来自动生成模板化的代码。
- 用于编译时处理,例如通过注解来检查代码中的潜在错误。
- **使用位置**
**使用位置**
实际开发中,注解常常出现在类、方法、成员变量、形参位置。当然还有其他位置。
在实际开发中,注解可以出现在类、方法、成员变量、方法参数等多个位置。
- **作用**
**作用**
如果说注释是写给人看的,那么注解就是写给程序看的。它更像一个标签,贴在一个类、一个方法或者字段上。它的目的是为当前读取该注解的程序提供判断依据及少量附加信息。比如程序只要读到加了@Test的方法就知道该方法是待测试方法又比如@Before注解程序看到这个注解就知道该方法要放在@Test方法之前执行。有时我们还可以通过注解属性为将来读取这个注解的程序提供必要的附加信息比如@RequestMapping("/user/info")提供了Controller某个接口的URL路径。
如果说注释是写给人看的,那么注解就是写给程序看的。它更像一个标签,贴在一个类、一个方法或者字段上。它的目的是为当前读取该注解的程序提供判断依据及少量附加信息。例如:
- @Test 标记一个方法为测试方法。
- @Before 标记一个方法在每个测试方法之前执行。
- @RequestMapping("/user/info") 提供 Controller 所对应的某个 URL 路径。
- **级别**
**级别**
注解和类、接口、枚举是同一级别的。注解的本质@interface和interface从名字上看非常相似
注解与类、接口、枚举处于同一级别。注解的本质类似于 @interface,与 interface 相似,但用于提供元数据
- **注解三角**
- 定义注解
- 使用注解
- 读取注解
**注解三角**
- 定义注解: 创建注解。
- 使用注解: 在代码中应用注解。
- 读取注解: 通过反射或其他机制读取并处理注解。
**小结**
- 注解就像标签,是程序判断执行的依据。比如,程序读到@Test就知道这个方法是待测试方法而@Before的方法要在测试方法之前执行
- 注解需要三要素:定义、使用、读取并执行
- 注解分为自定义注解、JDK 内置注解和第三方框架注解。自定义注解需要开发者自己定义、使用和读取,而 JDK 内置注解和第三方注解通常只需要使用,定义和读取由框架或工具完成
#### 5.1.3 Optional的介绍和使用(了解)
### 5.1.3 `Optional` 的介绍和使用(了解)
#### 定义