在 Java 中,注解(Annotation)是一种元数据,用于为代码提供额外的信息,通常用于编译时检查、运行时处理或生成代码。以下是 Java 中常用的注解及其分类:
一、Java 内置注解
-
@Override
-
用途:标记方法重写父类或接口的方法。
-
示例:
@Override public void toString() { ... }
-
-
@Deprecated
-
用途:标记方法、类或字段已过时,不推荐使用。
-
示例:
@Deprecated public void oldMethod() { ... }
-
-
@SuppressWarnings
-
用途:抑制编译器警告(如未检查的类型转换)。
-
示例:
@SuppressWarnings("unchecked") List list = new ArrayList();
-
-
@SafeVarargs
(Java 7+)-
用途:标记方法或构造器的可变参数(varargs)是类型安全的。
-
示例:
@SafeVarargs public static <T> void print(T... args) { ... }
-
-
@FunctionalInterface
(Java 8+)-
用途:标记接口是函数式接口(只有一个抽象方法)。
-
示例:
@FunctionalInterface public interface MyFunction { void execute(); }
-
二、元注解(用于定义其他注解)
-
@Target
-
用途:指定注解可以应用的目标(如类、方法、字段等)。
-
示例:
@Target(ElementType.METHOD) public @interface MyAnnotation { ... }
-
-
@Retention
-
用途:指定注解的保留策略(源码、编译时、运行时)。
-
示例:
@Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { ... }
-
-
@Documented
-
用途:标记注解是否包含在 Javadoc 中。
-
-
@Inherited
-
用途:标记子类是否继承父类的注解。
-
三、常用框架/库的注解
1. Spring 框架
-
@Component
:标记类为 Spring 管理的组件(Bean)。 -
@Autowired
:自动注入依赖(默认按类型匹配)。 -
@Service
、@Repository
、@Controller
:细化@Component
的语义(服务层、数据层、控制层)。 -
@RequestMapping
:定义 HTTP 请求的 URL 映射(Spring MVC)。 -
@Value
:注入配置文件中的值(如@Value("${app.name}")
)。
2. JUnit 测试
-
@Test
:标记测试方法。 -
@Before
、@After
:在测试方法前后执行的方法。 -
@BeforeClass
、@AfterClass
:在测试类的所有方法前后执行的方法。 -
@ParameterizedTest
:参数化测试(需配合@ValueSource
等使用)。
3. Lombok 库(简化代码)
-
@Data
:自动生成 getter、setter、equals
、hashCode
等方法。 -
@Getter
、@Setter
:生成 getter 或 setter 方法。 -
@NoArgsConstructor
、@AllArgsConstructor
:生成无参/全参构造器。 -
@Slf4j
:自动注入日志对象(如log.info()
)。
4. JPA/Hibernate(数据持久化)
-
@Entity
:标记类为数据库实体。 -
@Table
:指定实体对应的数据库表名。 -
@Id
、@GeneratedValue
:标记主键字段及其生成策略。 -
@Column
:定义字段与数据库列的映射关系。
5. Jackson(JSON 序列化)
-
@JsonIgnore
:忽略字段的序列化。 -
@JsonProperty
:自定义 JSON 字段名。 -
@JsonFormat
:定义日期/时间的格式(如@JsonFormat(pattern="yyyy-MM-dd")
)。
四、自定义注解
可以通过元注解定义自己的注解,例如:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {
String value() default "默认描述";
}
五、总结
-
核心注解:
@Override
、@Deprecated
、@SuppressWarnings
。 -
元注解:
@Target
、@Retention
、@Documented
、@Inherited
。 -
框架注解:Spring、JUnit、Lombok、JPA 等库的注解是实际开发中最常用的。