网站首页 > 技术文章 正文
一、核心注解
@SpringBootApplication
- 组合注解:@Configuration + @EnableAutoConfiguration + @ComponentScan
- 启动 Spring Boot 应用的主类注解。
@Configuration
- 标记类为配置类,替代 XML 配置文件。
@ComponentScan
- 自动扫描组件,默认扫描当前包及其子包。
@Import
- 导入其他配置类。
@PropertySource
- 加载外部配置文件(如 .properties 或 .yml)。
二、依赖注入(DI)
@Autowired
- 自动注入依赖(默认按类型匹配)。
@Qualifier
- 配合 @Autowired 指定具体 Bean 名称。
@Component
- 通用组件注解,标记为 Spring 管理的 Bean。
@Service
- 标记服务层组件。
@Repository
- 标记数据访问层(DAO)组件,自动处理数据库异常。
@Controller
- 标记 Web 控制器(MVC)。
@RestController
- @Controller + @ResponseBody,用于 RESTful API。
@Scope
- 定义 Bean 的作用域(如 singleton、prototype)。
三、配置与 Bean 管理
@Bean
- 在配置类中定义 Bean 实例。
@Value
- 注入配置文件中的值(如 @Value("${app.name}"))。
@ConfigurationProperties
- 将配置文件属性绑定到 Java 对象。
@Profile
- 指定 Bean 在特定环境(如 dev、prod)生效。
@Lazy
- 延迟初始化 Bean。
@Primary
- 指定优先注入的 Bean。
四、Web 开发(MVC)
@RequestMapping
- 映射 HTTP 请求到控制器方法。
@GetMapping
- 处理 GET 请求(替代 @RequestMapping(method=GET))。
@PostMapping
- 处理 POST 请求。
@PutMapping
- 处理 PUT 请求。
@DeleteMapping
- 处理 DELETE 请求。
@PathVariable
- 获取 URL 路径中的变量(如 /user/{id})。
@RequestParam
- 获取请求参数(如 ?name=xxx)。
@RequestBody
- 接收请求体中的 JSON/XML 数据。
@ResponseBody
- 返回数据而非视图(如 JSON)。
@ModelAttribute
- 绑定请求参数到模型对象。
@CrossOrigin
- 允许跨域请求。
@ExceptionHandler
- 处理控制器内的异常。
@ControllerAdvice
- 全局异常处理。
五、数据访问(JPA/Hibernate)
@Entity
- 标记 JPA 实体类。
@Table
- 指定数据库表名。
@Id
- 标记主键字段。
@GeneratedValue
- 主键生成策略(如自增)。
@Column
- 定义数据库列属性。
@OneToMany
- 定义一对多关系。
@ManyToOne
- 定义多对一关系。
@JoinColumn
- 指定外键列名。
@Transactional
- 声明事务管理。
@Query
- 自定义 JPQL 或 SQL 查询。
@Modifying
- 标记更新或删除操作。
六、验证(Validation)
@Valid
- 启用参数校验。
@NotNull
- 字段不能为 null。
@Size
- 字符串/集合长度限制。
- 校验邮箱格式。
@Pattern
- 正则表达式校验。
@Min/@Max
- 数值范围限制。
七、条件注解(Conditional)
@ConditionalOnProperty
- 当配置属性存在时生效。
@ConditionalOnClass
- 当类路径存在某个类时生效。
@ConditionalOnMissingBean
- 当容器中不存在指定 Bean 时生效。
@ConditionalOnWebApplication
- 仅在 Web 应用环境下生效。
八、AOP(面向切面编程)
@Aspect
- 定义切面类。
@Pointcut
- 定义切点表达式。
@Before
- 前置通知。
@After
- 后置通知。
@Around
- 环绕通知。
@AfterThrowing
- 异常通知。
九、缓存(Caching)
@EnableCaching
- 启用缓存支持。
@Cacheable
- 缓存方法返回值。
@CacheEvict
- 清除缓存。
@CachePut
- 更新缓存。
十、定时任务(Scheduling)
@EnableScheduling
- 启用定时任务。
@Scheduled
- 定义任务执行时间(如 cron 表达式)。
十一、测试(Testing)
@SpringBootTest
- 标记 Spring Boot 集成测试类。
@Test
- JUnit 测试方法。
@MockBean
- 注入 Mock 对象。
@DataJpaTest
- 仅测试 JPA 组件。
@WebMvcTest
- 仅测试 Web 层。
十二、安全(Security)
@EnableWebSecurity
- 启用 Spring Security。
@PreAuthorize
- 方法执行前的权限校验。
@PostAuthorize
- 方法执行后的权限校验。
@Secured
- 基于角色的访问控制。
@WithMockUser
- 测试时模拟用户登录。
十三、异步处理
@EnableAsync
- 启用异步方法支持。
@Async
- 标记异步执行方法。
十四、消息队列(如 RabbitMQ)
@EnableRabbit
- 启用 RabbitMQ 支持。
@RabbitListener
- 监听消息队列。
@RabbitHandler
- 处理消息的方法。
十五、Spring Cloud
@EnableEurekaClient
- 注册为 Eureka 客户端。
@EnableFeignClients
- 启用 Feign 客户端。
@FeignClient
- 定义 Feign 远程调用接口。
@LoadBalanced
- 启用负载均衡。
@HystrixCommand
- 定义熔断方法(Hystrix)。
十六、Actuator 监控
@Endpoint
- 定义自定义监控端点。
@ReadOperation
- 监控端点的读操作。
@WriteOperation
- 监控端点的写操作。
十七、国际化(i18n)
@MessageSource
- 定义国际化消息源。
十八、WebSocket
@EnableWebSocket
- 启用 WebSocket 支持。
@MessageMapping
- 处理 WebSocket 消息。
十九、工具类注解
@UtilityClass
- Lombok 工具类注解(构造方法私有化)。
@Slf4j
- Lombok 自动生成日志对象。
@Data
- Lombok 自动生成 Getter/Setter/ToString 等方法。
@Builder
- Lombok 生成 Builder 模式代码。
@AllArgsConstructor
- Lombok 生成全参构造方法。
@NoArgsConstructor
- Lombok 生成无参构造方法。
二十、其他常用注解
@Deprecated
- 标记方法/类已过时。
@SuppressWarnings
- 抑制编译器警告。
@FunctionalInterface
- 标记函数式接口(如 Lambda 表达式)。
总结
- 实际开发中,常用注解约 50-70 个,需结合具体场景灵活使用。
- 优先掌握核心注解(如 @SpringBootApplication、@RestController、@Autowired、@Transactional)。
猜你喜欢
- 2025-03-13 浅谈命令查询职责分离(CQRS)模式
- 2025-03-13 详细介绍一下Spring Boot3中如何整合JPA技术?
- 2025-03-13 京东大佬问我,每天新增100w订单数据的分库分表方案
- 2025-03-13 SpringBoot整合Spring Data JPA
- 2025-03-13 (新手勿进,全是代码)@ComponentScan、@ComponentScans详解
- 2025-03-13 清晰架构:融合 DDD、洋葱架构、整洁架构、CQRS (译)
- 2025-03-13 [Java 速成] @Service,@Repository 和 @Component 的区别 (day 8)
- 2025-03-13 一篇深入理解分层架构的文章
- 2025-03-13 Spring Data JPA——多表设计、一对多、多对多、多表查询
- 2025-03-13 整理了20个经典的Spring Boot面试题
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)