java开发常用注解
在Java开发中,注解(Annotation)广泛用于简化代码、配置元数据、框架集成等场景。以下是不同场景下常用的注解分类整理:
一、核心Java注解(内置)
-
@Override
表示方法重写父类或接口的方法,编译器会检查方法签名是否正确。 -
@Deprecated
标记类、方法或字段已过时,使用时编译器会生成警告。 -
@SuppressWarnings
抑制编译器警告(如"unchecked"
或"deprecation"
)。 -
@SafeVarargs
用于抑制泛型可变参数(varargs)的类型安全警告。 -
@FunctionalInterface
标记接口为函数式接口(仅允许一个抽象方法)。
二、Spring框架注解
核心与依赖注入
-
@Component
标记为Spring管理的通用组件。 -
@Service
标记业务逻辑层(Service层)组件。 -
@Repository
标记数据访问层(DAO层)组件,自动处理数据库异常。 -
@Controller
/@RestController
标记Web控制器(@RestController
返回JSON)。 -
@Autowired
自动注入依赖(推荐改用构造器注入,但注解仍常见)。 -
@Qualifier
指定注入的Bean名称,解决多个同类型Bean的冲突。 -
@Value
注入配置文件中的属性值(如@Value("${app.name}")
)。
Web与REST API
-
@RequestMapping
定义请求映射路径(可细分为@GetMapping
,@PostMapping
等)。 -
@PathVariable
从URL路径中获取参数(如/user/{id}
)。 -
@RequestParam
从请求参数中获取值(如/user?name=John
)。 -
@RequestBody
将HTTP请求体反序列化为Java对象(如JSON → DTO)。 -
@ResponseBody
将方法返回值序列化为HTTP响应体(如返回JSON)。
配置与AOP
-
@Configuration
标记类为配置类,定义Bean。 -
@Bean
在配置类中声明方法返回的Bean。 -
@Profile
指定Bean在特定环境下生效(如@Profile("dev")
)。 -
@Transactional
声明事务管理(方法或类级别)。 -
@Aspect
定义切面类,结合@Before
,@After
等实现AOP。
三、JPA/Hibernate(数据库)
-
@Entity
标记类对应数据库表。 -
@Table
指定表名(如@Table(name = "users")
)。 -
@Id
标记主键字段。 -
@GeneratedValue
配置主键生成策略(如自增、UUID)。 -
@Column
定义字段与列的映射(如@Column(name = "user_name")
)。 -
@OneToMany
/@ManyToOne
定义实体间的一对多、多对一关系。 -
@Query
在Repository中自定义JPQL或原生SQL查询。
四、Lombok注解(简化代码)
-
@Data
自动生成Getter/Setter、equals()
、hashCode()
和toString()
。 -
@Getter
/@Setter
单独生成Getter或Setter方法。 -
@NoArgsConstructor
/@AllArgsConstructor
生成无参构造器和全参构造器。 -
@Builder
提供Builder模式支持。 -
@Slf4j
自动生成日志对象(如log.info()
)。
五、测试相关
-
JUnit 5
-
@Test
: 标记测试方法。 -
@BeforeEach
/@AfterEach
: 每个测试前后的操作。 -
@Mock
/@InjectMocks
(Mockito): 模拟依赖注入。
-
-
Spring Boot Test
-
@SpringBootTest
: 启动完整Spring上下文测试。 -
@MockBean
: 模拟并替换Spring上下文中的Bean。
-
六、其他常用注解
-
Jackson(JSON序列化)
-
@JsonProperty
: 指定JSON字段名。 -
@JsonIgnore
: 忽略字段序列化。
-
-
Swagger(API文档)
-
@ApiOperation
: 描述API接口功能。 -
@ApiParam
: 描述接口参数。
-
-
Spring Boot
-
@SpringBootApplication
: 主启动类注解(组合了@Configuration
、@ComponentScan
等)。 -
@EnableScheduling
: 启用定时任务。
-
示例代码片段
// Spring Boot + JPA 示例 @RestController @RequestMapping("/api/users") public class UserController { @Autowired private UserService userService; @GetMapping("/{id}") public User getUser(@PathVariable Long id) { return userService.findById(id); } } // Lombok 简化实体类 @Data @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "user_name") private String username; }
这些注解能显著提升开发效率,具体使用需结合项目框架和需求调整。