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

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

1.组件定义注解

1.1 @Component

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

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

  • 示例:

     @Componentpublic class MyComponent { /* ... */ }

1.2 分层组件注解

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

1.3 @RestController

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

  • 示例:

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

2.依赖注入注解

2.1 @Autowired

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

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

  • 示例:

     @Servicepublic class UserService {@Autowiredprivate 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 的创建逻辑。

  • 示例:

     @Configurationpublic class AppConfig {@Beanpublic DataSource dataSource() { /* ... */ }}

3.2 @ComponentScan

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

3.3 @Bean

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

  • 示例:

     @Configurationpublic class DataSourceConfig {@Beanpublic 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.mzph.cn/web/72575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 PaddlePaddle 官方提供的 Docker 镜像

CUDA版本高PaddlePaddle不支持时&#xff0c;可以使用 PaddlePaddle 官方提供的 Docker 镜像 1. 安装 Docker Desktop1.1 下载 Docker Desktop1.2 安装 Docker Desktop1.3 启用 WSL 2 或 Hyper-V1.4 启动 Docker Desktop1.5 Docker不运行解决方法 2. 拉取 PaddlePaddle Docker …

VSCode C/C++ 环境搭建指南

VSCode C/C 环境搭建指南 第一步&#xff1a;下载并安装VSCode 访问官方网站 打开浏览器&#xff0c;访问Visual Studio Code官网。 选择平台 根据您的操作系统&#xff08;Windows、Mac、Linux&#xff09;选择对应的版本进行下载。 下载和安装 下载完成后&#xff0c;双击…

项目中使用柯里化函数

在项目中使用**柯里化函数&#xff08;Currying&#xff09;**可以显著提高代码的灵活性、可复用性和可读性。柯里化是一种将多参数函数转换为一系列单参数函数的技术。通过柯里化&#xff0c;可以将函数的调用方式从一次性传递所有参数改为分步传递参数&#xff0c;从而实现部…

Golang Channel 使用详解、注意事项与死锁分析

#作者&#xff1a;西门吹雪 文章目录 一、引言&#xff1a;Channel 在 Go 并发编程中的关键地位二、Channel 基础概念深度剖析2.1 独特特性2.2 类型与分类细解 三、Channel 基本使用实操指南3.1 声明与初始化3.3 单向 Channel 的运用 四、Channel 典型使用场景实战案例4.1 协程…

C语言经典代码题

1.输入一个4位数&#xff1a;输出这个输的个位 十位 百位 千位 #include <stdio.h> int main(int argc, char const *argv[]) {int a;printf("输入一个&#xff14;位数&#xff1a;");scanf("%d",&a);printf("个位&#xff1a;%d\n"…

stable-diffusion-webui-docker 构建 comfy-ui

Ubuntu 安装 stable-diffusion-webui-docker 常见问题处理方法 这篇文章介绍了在 Ubuntu 上安装 stable-diffusion-webui-docker&#xff0c;运行 docker compose --profile auto up --build 构建出的界面是 stable-diffusion-webui&#xff0c;如果运行 docker compose --prof…

【AI学习从零至壹】Pytorch神经⽹络

Pytorch神经⽹络 神经网络简介神经元激活函数 神经网络神经⽹络的⼯作过程前向传播(forward) 反向传播(backward)训练神经⽹络 Pytorch搭建并训练神经⽹络神经⽹络构建和训练过程数据预处理构建模型优化器&提取训练数据训练样本 神经网络简介 神经元 在深度学习中&#x…

stm32 L432KC(mbed)入门第一课

目录 一. 前言 二. 专栏意义 三. MS入门第一课 一. 前言 新的一年MS课程又开始了&#xff0c;同时也到了该专栏的第三个年头。在前两年中&#xff0c;该专栏帮助了很多第一次接触单片机的同学。其中&#xff0c;有的同学订阅专栏是为了更好的完成并且通过MS这门课程&#xf…

如何创建HTML自定义元素:使用 Web Component 的最佳实践

什么是 Web Component&#xff1f; Web Component 是一组允许开发者创建可复用、自定义 HTML 元素的技术。它们使得我们可以像原生 HTML 标签一样使用这些自定义元素&#xff0c;从而提升代码的模块化和复用性。Web Component 的核心技术有以下三部分&#xff1a; Custom Ele…

【系统架构设计师】操作系统 - 文件管理 ② ( 位示图 | 空闲区域 管理 | 位号 | 字号 )

文章目录 一、空闲区域 管理1、空闲区域分配2、空闲区域 管理方式 简介 二、位示图 简介1、位示图 表示2、位示图 字号3、位示图 位号4、位示图 中 比特位 分组管理 三、位示图 考点1、计算磁盘 位示图 的大小2、位示图 位置计算 一、空闲区域 管理 1、空闲区域分配 在 索引文件…

基于 Docker 和 Flask 构建高并发微服务架构

基于 Docker 和 Flask 构建高并发微服务架构 一、微服务架构概述 &#xff08;一&#xff09;微服务架构的优点 微服务架构是一种将应用程序拆分为多个小型、自治服务的架构风格&#xff0c;在当今的软件开发领域具有显著的优势。 高度可扩展性&#xff1a;每个微服务可以独…

搭建Django开发环境

搭建Django开发环境 文章目录 搭建Django开发环境[toc]一、安装Python语言环境二、安装Visual Studio Code三、安装setuptools工具四、安装Django框架 一、安装Python语言环境 1.测试当前系统环境是否存在Python语言解释器 python --version2.打开PowerShell终端&#xff0c;…

图论part3|101.孤岛的总面积、沉没孤岛、417. 太平洋大西洋水流问题

101. 孤岛的总面积 &#x1f517;&#xff1a;101. 孤岛的总面积思路&#xff1a;和昨天的岛的区别是&#xff1a;是否有挨着边的岛屿 所以可以先遍历四条边挨着的岛屿&#xff0c;把他们标记为非孤岛再计算其他岛屿当中的最大面积 代码&#xff1a;&#xff08;深度搜索&…

AP AR

混淆矩阵 真实值正例真实值负例预测值正例TPFP预测值负例FNTN &#xff08;根据阈值预测&#xff09; P精确度计算&#xff1a;TP/(TPFP) R召回率计算&#xff1a;TP/(TPFN) AP 综合考虑P R 根据不同的阈值计算出不同的PR组合&#xff0c; 画出PR曲线&#xff0c;计算曲线…

Ubuntu上部署Flask+MySQL项目

一、服务器安装python环境 1、安装gcc&#xff08;Ubuntu默认已安装&#xff09; 2、安装python源码 wget https://www.python.org/ftp/python/3.13.2/Python-3.13.2.tar.xz 3、安装Python依赖库 4、配置python豆瓣源 二、服务器安装虚拟环境 1、安装virtualenv pip3.10 ins…

深度学习有哪些算法?

深度学习包含多种算法和模型&#xff0c;广泛应用于图像处理、自然语言处理、语音识别等领域。以下是主要分类及代表性算法&#xff1a; 一、基础神经网络 多层感知机&#xff08;MLP&#xff09; 最简单的深度学习模型&#xff0c;由多个全连接层组成&#xff0c;用于分类和回…

【css酷炫效果】纯CSS实现按钮流光边框

【css酷炫效果】纯CSS实现按钮流光边框 缘创作背景html结构css样式完整代码效果图 【css酷炫效果】纯CSS实现按钮流光边框。 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90490501 缘 创作随缘&#xff0c;不定时更…

【Android】ListView控件在进入|退出小窗下的异常

1&#xff0c;描述 页面使用了ListView控件&#xff0c;随后进入小窗模式&#xff0c;导致视图遮挡 2&#xff0c;根源 ListView虽然进入小窗relayout&#xff0c;其measureChild高度比全屏下要小&#xff0c;但是&#xff0c;其内部使用了Recycler机制&#xff0c;缓存了ite…

基于ssm的电子病历系统(全套)

一、系统架构 前端&#xff1a;jsp | bootstrap | jquery 后端&#xff1a;spring | springmvc | mybatis 环境&#xff1a;jdk1.8 | mysql | maven | tomcat | idea 二、代码及数据库 三、功能介绍 01. 登录 02. 主页 03. 管理员-个人中心-修改密码…

使用STM32CubeMX+DMA+空闲中断实现串口接收和发送数据(STM32G070CBT6)

1.STM32CubeMX配置 &#xff08;1&#xff09;配置SYS &#xff08;2&#xff09;配置RCC &#xff08;3&#xff09;配置串口&#xff0c;此处我用的是串口4&#xff0c;其他串口也是一样的 &#xff08;4&#xff09;配置DMA&#xff0c;将串口4的TX和RX添加到DMA中 &#…