springboot常用的注解需要了解,开发必备

好的,Spring Boot 的注解体系是其"约定大于配置"理念的核心体现。下面我将这些注解分为几大类,并附上解释和示例,方便你理解和记忆。

一、项目启动与核心配置注解

这些是 Spring Boot 应用的基石。

注解 作用 示例
​​@SpringBootApplication​​ ​​核心注解​ ​,用于主类。是 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan的组合注解。标记此为启动类。 @SpringBootApplication public class MyApplication { ... }
​​@SpringBootTest​​ ​​测试注解​​,用于测试类。会启动一个用于测试的 Spring 应用上下文(容器)。 @SpringBootTest class MyServiceTest { ... }
​​@Configuration​​ 标记一个类为​​配置类​ ​,相当于一个 XML 配置文件,内部可声明 @Bean。 @Configuration public class AppConfig { ... }
​​@ConfigurationProperties​​ 将配置文件(如 application.yml)中的属性批量绑定到一个 Java Bean 上。 @ConfigurationProperties(prefix = "app.datasource") public class DataSourceProps { ... }
​​@Value​​ ​​属性注入​​,直接将配置文件中的某个属性值注入到字段中。 @Value("${app.page-size}") private int pageSize;

二、定义 Bean 及依赖注入的注解

这些注解用于创建和组装组件。

注解 作用 示例
​​@Component​​ ​​通用注解​​,标记一个类为 Spring 的组件(Bean),会被容器扫描并创建实例。 @Component public class MyService { ... }
​​@Service​​ ​​语义化注解​ ​,功能同 @Component,但通常用于标注​​业务逻辑层​​(Service 层)的类。 @Service public class UserServiceImpl { ... }
​​@Repository​​ ​​语义化注解​ ​,功能同 @Component,但通常用于标注​​数据访问层​​(DAO 层)的类。会自动处理数据库异常。 @Repository public class UserRepository { ... }
​​@Controller​​ 标记一个类为 ​​Spring MVC 控制器​​,主要用于接收 Web 请求。 @Controller public class UserController { ... }
​​@RestController​​ ​​@Controller和 @ResponseBody的组合注解​​。标记的类所有方法返回的数据都直接写入响应体(JSON/XML),用于构建 RESTful API。 @RestController public class UserApiController { ... }
​​@Autowired​​ ​​依赖注入​​,自动按照类型(byType)注入依赖。可用于字段、setter 方法、构造方法。 @Autowired private UserService userService;
​​@Bean​​ 通常在配置类(@Configuration)中使用,​​方法级别注解​​。将方法返回的对象声明为一个 Bean,交于 Spring 容器管理。 @Bean public RestTemplate restTemplate() { return new RestTemplate(); }

三、Web MVC 相关注解(Controller 层)

这些注解用于处理 HTTP 请求和响应。

注解 作用 示例
​​@RequestMapping​​ ​​映射请求​​,将 HTTP 请求映射到 MVC 控制器的方法上。可简化如下注解。 @RequestMapping("/api/users")
​​@GetMapping​​ 映射 ​​HTTP GET​​ 请求。 @GetMapping("/{id}") public User getUser(@PathVariable Long id) { ... }
​​@PostMapping​​ 映射 ​​HTTP POST​​ 请求。 @PostMapping public User createUser(@RequestBody User user) { ... }
​​@PutMapping​​ 映射 ​​HTTP PUT​​ 请求。 @PutMapping("/{id}") ...
​​@DeleteMapping​​ 映射 ​​HTTP DELETE​​ 请求。 @DeleteMapping("/{id}") ...
​​@PathVariable​​ 将 ​​URL 模板变量​​绑定到方法参数。 getUser(@PathVariable("id") Long userId)
​​@RequestParam​​ 将​​请求参数​ ​(如 ?name=John)绑定到方法参数。 getUsers(@RequestParam(defaultValue="0") int page)
​​@RequestBody​​ 将 ​​HTTP 请求体​​(如 JSON)绑定到方法参数对象。 createUser(@RequestBody @Valid User user)
​​@ResponseBody​​ 将方法返回值直接写入 HTTP 响应体,而不是视图解析。 @ResponseBody public User getUser() { ... }
​​@RestControllerAdvice​​ ​​全局异常处理​ ​,结合 @ExceptionHandler使用,用于统一处理控制器层的异常。 @RestControllerAdvice public class GlobalExceptionHandler { ... }

四、数据访问相关注解(DAO 层)

主要用于 Spring Data JPA 或 MyBatis。

注解 作用 示例
​​@Entity​​ JPA 注解,标记一个类为​​数据库实体​​,对应一张表。 @Entity @Table(name = "users") public class User { ... }
​​@Id​​ JPA 注解,声明实体类的主键字段。 @Id private Long id;
​​@Repository​​ 如上所述,用于 DAO 层组件。
​​@Transactional​​ ​​声明式事务管理​​,标记方法或类需要事务支持。 @Transactional public void updateUser(User user) { ... }

五、其他常用注解

注解 作用 示例
​​@Profile​​ ​​环境切换​​,指定某个 Bean 或配置只在特定环境(如 dev, test, prod)下生效。 @Bean @Profile("dev") public DataSource devDataSource() { ... }
​​@ConditionalOnProperty​​ ​​条件化配置​​,根据配置文件中的属性值来决定是否创建某个 Bean。 @Bean @ConditionalOnProperty(name = "app.feature.cache", havingValue = "true") public CacheManager cacheManager() { ... }
​​@Valid​​ ​​参数校验​ ​,与 @RequestBody等配合使用,触发对对象属性的校验规则(如 @NotNull, @Email)。 createUser(@RequestBody @Valid User user)
​​@Slf4j​​ ​​Lombok 注解​ ​,为类自动注入一个 log对象,用于日志记录。需安装 Lombok 插件。 @Slf4j @RestController public class MyController { ... log.info("This is a log."); }

总结

要快速掌握,可以记住这个核心流程:

  1. ​​启动​ ​:主类上用 @SpringBootApplication。

  2. ​​定义 Bean​​:

    • Controller 用 @RestController。
    • Service 用 @Service。
    • Dao 用 @Repository。
    • 配置类用 @Configuration和 @Bean。
  3. ​​注入 Bean​ ​:在需要的地方用 @Autowired。

  4. ​​处理 Web 请求​ ​:在 Controller 的方法上用 @GetMapping/@PostMapping等,参数用 @PathVariable/@RequestBody。

  5. ​​操作数据​ ​:在 Service 方法上用 @Transactional保证事务。

建议你边学边练,创建一个简单的 Spring Boot 项目(比如一个 User 的 CRUD 接口),把这些注解实际用一遍,理解会深刻得多。

相关推荐
captain3763 小时前
MyBatis(入门5)其他查询操作
java·数据库·spring boot·mybatis
深蓝AI5 小时前
Python 3.13 的 Queue.shutdown:异步消费者终于能正常收工了
后端
武子康5 小时前
MultiNet6 空闲崩溃:`EXCVADDR=0x8` 后又出现 `CORRUPT HEAP`
人工智能·后端·agent
武子康6 小时前
MultiNet7 每轮都 clean,ESP32-P4 内存为什么还在掉?
人工智能·后端·agent
超级架构师7 小时前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core
陈随易7 小时前
AI 运维服务器,安全又可靠的方法
前端·后端·程序员
IT_陈寒9 小时前
JavaScript的this坑人实录,这次我真的记下来了
前端·人工智能·后端
starzy199010 小时前
Scala类和对象:从构造器到样例类的完整指南
开发语言·后端·scala
梦影_10 小时前
MySQL进阶教程(五)—— SQL调优(下)
android·大数据·数据库·后端·sql·mysql·database
考虑考虑10 小时前
mariadb数据库
数据库·后端·mariadb