当前位置: 首页 > article >正文

Spring 框架中常用注解和使用方法

Spring 框架中常用注解的详细解释与应用场景,结合核心功能和实际开发需求进行分类说明:

1.组件定义注解

1.1 @Component

  • 作用:通用注解,将普通 Java 类标记为 Spring 管理的 Bean,由容器实例化和管理,相当于 XML 中的 <bean> 标签。

  • 应用场景:非特定层次(如工具类、配置类)的组件声明。

  • 示例:

     @Component
     public class MyComponent { /* ... */ }

1.2 分层组件注解

  • @Controller:标记控制层(Web 层),处理 HTTP 请求并返回视图或数据。
  • @Service:标记服务层(业务逻辑层),封装复杂业务逻辑。
  • @Repository:标记数据访问层(DAO 层),处理数据库操作,支持异常转换(如 SQL 异常转 Spring DataAccessException)。
  • 区别:三者均为@Component的特化版本,通过语义化区分层次,增强代码可读性。

1.3 @RestController

  • 作用@Controller + @ResponseBody 的组合,用于 RESTful API 开发,方法返回值直接序列化为 JSON/XML。

  • 示例:

     @RestController
     public class UserController { 
         @GetMapping("/user")
         public User getUser() { /* ... */ }
     }

2.依赖注入注解

2.1 @Autowired

  • 作用:按类型(byType)自动注入依赖,支持字段、构造器、方法注入。若存在多个同类型 Bean,需配合 @Qualifier 指定名称。

  • 属性required=false 允许依赖为空。

  • 示例:

     @Service
     public class UserService {
         @Autowired
         private UserRepository userRepo;
     }

2.2 @Resource

  • 作用:按名称(byName)注入,属于 JSR-250 规范。默认按字段名匹配,若无匹配则按类型注入。
  • @Autowired 区别:
    • @Autowired 是 Spring 特有,默认按类型注入,需配合 @Qualifier 指定名称。
    • @Resource是 Java EE 标准,更灵活,适用于多实现类场景。

2.3 @Value

  • 作用:注入配置文件(如 application.properties)中的属性值,支持表达式和默认值。

  • 示例:

     @Value("${app.timeout:30}")
     private int timeout;

3.配置类与自动装配

3.1 @Configuration

  • 作用:标记配置类,替代 XML 配置文件,定义 Bean 的创建逻辑。

  • 示例:

     @Configuration
     public class AppConfig {
         @Bean
         public DataSource dataSource() { /* ... */ }
     }

3.2 @ComponentScan

  • 作用:指定 Spring 扫描的包路径,自动注册 @Component 及其派生注解的类为 Bean。
  • @SpringBootApplication 关系:@SpringBootApplication包含@ComponentScan,默认扫描启动类所在包及其子包。

3.3 @Bean

  • 作用:在配置类中定义 Bean,常用于第三方库(如数据库连接池)的实例化。

  • 示例:

     @Configuration
     public class DataSourceConfig {
         @Bean
         public DataSource druidDataSource() { return new DruidDataSource(); }
     }

4.Spring MVC 相关注解

4.1 @RequestMapping

  • 作用:映射 HTTP 请求到控制器方法,支持类和方法级路径,可指定请求方法(GET/POST 等)。

  • 简化注解@GetMapping@PostMapping 等,语义更明确。

  • 示例:

     @Controller
     @RequestMapping("/api")
     public class ApiController {
         @GetMapping("/users")
         public String listUsers() { /* ... */ }
     }

4.2 参数绑定注解

  • @PathVariable:绑定 URL 路径变量到方法参数。
     @GetMapping("/user/{id}")
     public User getUser(@PathVariable Long id) { /* ... */ }
  • @RequestParam:绑定请求参数到方法参数,支持默认值。

  • @RequestBody:将请求体 JSON 反序列化为 Java 对象。

5.条件注解与高级特性

5.1 @Conditional 系列

  • 作用:根据条件动态装配 Bean,如 @ConditionalOnClass(类路径存在时生效)、@ConditionalOnMissingBean(容器中无该 Bean 时生效)。
  • 应用场景:Spring Boot 自动配置的核心机制。

5.2 AOP 相关注解

  • @Aspect:定义切面类。
  • @Before/@After/@Around:定义通知类型,控制切面执行时机。

5.3 生命周期回调

  • @PostConstruct:Bean 初始化后执行的方法。
  • @PreDestroy:Bean 销毁前执行的方法。

6.Spring Boot 核心注解

6.1 @SpringBootApplication

  • 组成@Configuration + @EnableAutoConfiguration + @ComponentScan,标记主启动类。
  • 作用:启用自动配置、组件扫描和配置类定义。

6.2 @EnableAutoConfiguration

  • 原理:根据类路径依赖自动配置 Bean(如引入spring-boot-starter-web自动配置 Tomcat 和 Spring MVC)。

7.总结

  • 组件分层:通过 @Controller@Service@Repository 明确代码职责。
  • 依赖管理:优先使用 @Autowired 按类型注入,多实现场景用 @Qualifier@Resource
  • 配置简化@Configuration + @Bean 替代 XML,@SpringBootApplication 整合启动逻辑。
  • RESTful 开发@RestController + @RequestBody/@PathVariable 构建 API。

通过合理使用这些注解,可显著减少配置代码,提升开发效率和代码可维护性。


http://www.kler.cn/a/590367.html

相关文章:

  • 【一文读懂】RTSP与RTMP的异同点
  • MyBatis (一)持久层框架-基础入门
  • 2024下半年真题 系统架构设计师 案例分析
  • IP关联对跨境电商的影响及如何防范措施?
  • unity is running as administrator 管理员权限问题
  • 【后端开发面试题】每日 3 题(十四)
  • ORM操作(flask)
  • 基于SpringBoot + Vue 的心理健康系统
  • Matlab自学笔记四十八:各类型缺失值的创建、判断、替换、移位和处理方法
  • Spring Boot 核心知识点:依赖注入 (Dependency Injection)
  • 轻量级、高性能的 Rust HTTP 服务器库 —— Hyperlane
  • Spring Cloud 负载均衡(Ribbon)- 流量管理与服务调用优化
  • C++从入门到入土(八)——多态的原理
  • 冒泡排序:古老算法中的智慧启示
  • 「Java EE开发指南」如何用MyEclipse构建一个Web项目?(二)
  • Zabbix7.0+DeepSeek大模型实现人工智能告警分析
  • 鸿蒙路由 HMRouter 配置及使用 二
  • WebSocket与MQTT协议深度对比:选择合适的通信协议
  • 如何用Python批量将CSV文件编码转换为UTF-8并转为Excel格式?
  • 技术与情感交织的一生 (一)