Java如何添加注解?
- 后端开发
- 2025-06-08
- 4959
在Java中,可通过
mark()
方法在输入流中标记当前位置,配合
reset()
方法可回溯至标记处重新读取数据,需注意
markSupported()
检查支持性,且
mark(int)
参数指定回溯缓冲区大小,常用于重复解析流数据场景。
什么是Java标记(注解)?
在Java中,”标记”通常指注解(Annotation),一种为代码添加元数据的特殊语法,它像标签一样附加在类、方法或变量上,用于向编译器或运行时环境提供额外信息,是Java开发的核心技术之一。
注解的核心用途
- 编译检查:如
@Override
确保方法正确重写父类方法 - 代码生成:Lombok的
@Data
自动生成getter/setter - 运行时处理:Spring的
@Autowired
实现依赖注入 - 配置替代:替代XML配置(如JPA的
@Entity
)
定义自定义注解
通过@interface
关键字创建,可指定作用目标和保留策略:
import java.lang.annotation.*; // 定义注解作用在方法和类上 @Target({ElementType.METHOD, ElementType.TYPE}) // 注解保留到运行时 @Retention(RetentionPolicy.RUNTIME) public @interface CustomMarker { String value() default "默认值"; // 注解属性 int priority() default 1; }
使用注解的三种方式
内置注解示例
“`java
@Override // 标记方法重写
public String toString() { … }
@Deprecated // 标记过时方法
public void oldMethod() { … }
<h3>2. 自定义注解示例</h3>
```java
@CustomMarker(value="重要类", priority=2)
public class MyClass {
@CustomMarker(priority=3)
public void criticalMethod() { ... }
}
注解参数传递
“`java
@RequestMapping(path=”/api”, method=RequestMethod.GET) // SpringMVC示例
public ResponseEntity
getData() { … }
“`
运行时处理注解(反射)
通过反射读取注解信息实现动态逻辑:
“`java
Class
clazz = MyClass.class;
if (clazz.isAnnotationPresent(CustomMarker.class)) {
CustomMarker marker = clazz.getAnnotation(CustomMarker.class);
System.out.println(“优先级:” + marker.priority()); // 输出:2
}
“`
关键注意事项
- 元注解:定义注解时需用
@Target
指定作用目标,@Retention
设置生命周期 - 默认值:通过
default
关键字为注解属性设默认值 - 单值注解:若注解只有
value
属性,使用时可直接写@Annotation("值")
- 性能影响:运行时注解的反射操作有性能开销,避免滥用
典型应用场景
场景 | 注解示例 | 作用 |
---|---|---|
单元测试 | @Test |
标记JUnit测试方法 |
依赖注入 | @Autowired |
自动装配Bean(Spring) |
API开发 | @GetMapping |
定义REST端点(SpringBoot) |
代码检查 | @NonNull |
标识不可空参数(Lombok) |
Java注解通过声明式编程简化开发,是框架设计的基石,掌握其定义、使用及处理流程,能显著提升代码的可维护性和扩展性,实际开发中应:
- 优先使用标准注解(如
@Override
) - 阅读框架文档理解定制注解
- 在需要代码分析或生成时创建自定义注解
引用说明:本文内容基于Oracle官方Java注解文档、《Effective Java》最佳实践及Spring框架技术手册,遵循Java语言规范标准。