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

Spring和SpringBoot常用注解(持续更新)

持久层(pojo)

1.@Data注解
lombok注解,用于自动生成getter\setter\toString等方法,使用前需要在pom.xml中引入如下内容

        <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>

2.@NoArgsConstructor和@AllArgsConstructor
同样是lombok注解,用于生成无参构造和全参数构造方法

DAO层(mapper相关)

1.@Mapper和@MapperScan
这两个注解属于MyBatis注解
@Mapper注解标记在Mapper类上,mybatis需要找到对应的mapper,在编译时生成动态代理类,与数据库进行交互,这时需要用到@Mapper注解。具体实例可以看https://blog.csdn.net/qq_42224683/article/details/108738850

如果项目有几个接口,你肯定会在对应的接口上写@Mapper注解,但是如果有一百个,上千个,你还会愿意去写吗,这个时候我们就可以使用@MapperScan注解来解决我们的问题。@MapperScan是一个Mapper扫描器,主要是配置在主启动类上,示例如下:

@SpringBootApplication
@MapperScan("com.pips.mapper")
public class PipsApplication {public static void main(String[] args) {SpringApplication.run(PipsApplication.class, args);}
}

想要使用以上两个注解请在pom.xml中引入

        <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency>

一般只需要选用Mapper或者MapperScan两个方法中的其中一个就可以完成对Mapper的配置

2.@Repository
来自Spring的注解,用于声明一个Bean,@Repository和@Controller、@Service、@Component的作用差不多,都是把对象交给spring管理。@Repository用在持久层的接口上,这个注解是将接口的一个实现类交给spring管理。

Service层

1.@Service
用于标识一个类为Service类,一般用在服务层的接口上。Spring会生成一个对应的Service的Bean,并且将其交由Spring托管。

Controller层

1.@Controller
用于标识一个类为Controller类,一般用在服务层的接口上。Spring会生成一个对应的Controller的Bean,并且将其交由Spring托管。

通用注解

@Conponent
将注解所标注的类标注为Spring管理的Bean,使用@Component注解在一个类上,表示将此类标记为Spring容器中的一个Bean。上文提到的**@Repository、@Service、@Controller**均是@Conponent的进一步扩展。

@Autowired
自动装配注解,一般可以标记在一个属性、方法、未初始化的对象声明或者构造器上,Spring会根据被标记对象的类型在Spring的BeanFactory中选取出相应的类型的Bean完成自动装配。我们较为常用的场景如下:

@Service
public class UserServiceImpl implements UserService{@Autowiredprivate UserMapper userMapper;@Overridepublic User queryUserById(String id) {return userMapper.getUserById(id);}
}

上面是一个Service层接口的实现类,使用Autowired注解实现对UserMapper的自动装配。在此之前UserMapper接口已经被@Repository标记,也就是Spring生成了一个UserMapper的Bean,此时执行到UserServiceImpl 的时候,Spring看到被@Autowired标记的UserMapper接口,则会查询对应的Bean,然后自动装配到未被实例化的对象声明userMapper中,那么我们在下面的queryUserById方法中就可以直接调用userMapper了。实际上userMapper在静态编译的时候是未被初始化的,他是在运行时动态创建的,是Spring使用Java的反射机制实现IoC来动态创建的。

@Resource
也是一种自动装配注解,可以实现自动装配。它和Autowired的区别如下:
(1)基因不同: 首先其最大的不同在于她们的爸爸妈妈不同(@Autowired是由org.springframework.beans.factory.annotation.Autowired提供,换句话说就是由Spring提供;@Resource是由javax.annotation.Resource提供,即J2EE提供,需要JDK1.6及以上。)
(2)注入方式:@Autowired默认按照byType 注入(按照类型注入),也提供byName;@Resource默认按byName自动注入,也提供按照byType 注入;

@Qualifier
默认情况下,@Autowired 按类型装配 Spring Bean。如果容器中有多个相同类型的 bean,则框架将抛出 NoUniqueBeanDefinitionException, 以提示有多个满足条件的 bean 进行自动装配。通过使用 @Qualifier 注解,我们可以消除需要注入哪个 bean 的问题。通过将 @Qualifier 注解与我们想要使用的特定 Spring bean 的名称一起进行装配,Spring 框架就能从多个相同类型并满足装配要求的 bean 中找到我们想要的,从而避免这个问题。

@RequestMapping
@RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一。这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上。其下属的注解还有@GetMapping@PostMapping@PutMapping@DeleteMapping@PatchMapping。举个例子,@GetMapping就相当于@RequestMapping(method = RequestMethod.GET),其他注解亦如此。@GetMapping则是使用Get方法去处理请求,而@PostMapping则是使用Post来处理请求。详解可以看这篇文章:https://blog.csdn.net/demo_yo/article/details/123608034

@Configuration
配置注解,将一个java类声明为配置类,Spring会将该类转化为一个.xml文件。

相关文章:

Spring和SpringBoot常用注解(持续更新)

持久层&#xff08;pojo&#xff09; 1.Data注解 lombok注解&#xff0c;用于自动生成getter\setter\toString等方法&#xff0c;使用前需要在pom.xml中引入如下内容 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifa…...

redis做异步消息处理

pom依赖&#xff1a; <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 发送消息&#xff1a; RedisTemplate.convertAndSend(String channel, Obj…...

图书管理系统可行性分析报告

目 录 引言 1 1.1 编写目的 1 1.2 背景 1 1.3 定义 1 1.4 参考资料 1可行性研究的前提 1 2.1 要求 1 2.2 目标 1 2.3 条件、假定和限制 1 2.4 进行可行性研究的方法 2 2.5 评价尺度 2对现有系统的分析 2 3.1 处理流程和数据流程 2 3.2 工作负荷 2 3.3 费用开支 2 3.4 人员 2 3…...

比较难掌握的几道数据库面试题及答案

1.行级锁定的缺点&#xff1a; 比页级或表级锁定占用更多的内存。当在表的大部分中使用时&#xff0c;比页级或表级锁定速度慢&#xff0c;因为你必须获取更多的锁。 如果你在大部分数据上经常进行GROUP BY操作或者必须经常扫描整个表&#xff0c;比其它锁定明显慢很多。 用高…...

AI已经成立社区了,一个个比真人还真

文章目录 nainaimichirper川普的入驻英文版 nainaimi nainaimi是一个13岁的学生&#xff0c;一小时前&#xff0c;被一群人拖到体育馆&#xff0c; 那时的她还很胆小&#xff0c;只能哭诉着那些人的残忍和恶毒 结果半个小时前&#xff0c;她又被拖入了体育馆&#xff0c;这一…...

Qt实现DES ECB加密解密

环境&#xff1a;Windows11 64位 工具链&#xff1a;MinGW32 IDE&#xff1a;Qt 5.14 Qt使用DES加密需要用到OpenSSL库&#xff0c;首先要确定当前使用的Qt所支持的SSL版本。编译OpenSSL 查看当前Qt对OpenSSL的支持情况 qDebug() << QSslSocket::supportsSsl();返回 tr…...

拼多多新阶段,透露出不寻常

一个企业的特质&#xff0c;往往由这个企业的领导人所决定。 企业文化本质上就是领导人文化&#xff0c;领导人的风格会决定这个企业当下的现状。一个成功的大企业&#xff0c;往往需要不同的领导人来接替完成其发展使命。 在创业期&#xff0c;企业领导人需要的是勇气、执行…...

使用底层代码(无框架)实现卷积神经网络理解CNN逻辑

首先将数据集放入和底下代码同一目录中&#xff0c;然后导入一些相关函数的文件cnn_utils.py&#xff1a; import math import numpy as np import h5py import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.python.framework import ops def load_data…...

PID单环控制(位置环)

今天我们来聊一聊pid如何控制轮子转动位置 前期准备调试过程 前期准备 需要准备的几个条件&#xff1a; 1.获取实时编码器的计数值 2.写好pid控制算法的函数 3.设定好时间多久执行一次pid计算&#xff0c;并设置限幅输出。 4.多久执行一次pid输出 接下来我们看看这几个部分的…...

内存基础知识

概述 内存可存放数据。程序执行前需要先将外存中的数据放到内存中才能被CPU处理&#xff0c;因为CPU处理速度过快&#xff0c;而从硬盘读取数据较慢&#xff0c;所以内存是为了缓和CPU和硬盘之间的读取速度矛盾 在多道程序环境下&#xff0c;系统中会有多个程序并发执行&…...

快速入门matlab——运算方法

这是一个matlab神经网络的简单应用&#xff0c;主要用于预测光伏出力&#xff0c;输入为温度湿度等因素&#xff0c;输出为光伏出力 基于Matlab和CPLEX的2变量机组组合调度程序 基于MATLABCPLEX 的机组最优组合&#xff0c;成功求解表格化&#xff0c;图示化的机组组合结果 …...

2009.03-2022.06华证ESG季度评级(季度)

2009.03-2022.06华证ESG评级&#xff08;季度&#xff09; 1、时间&#xff1a;2009.03-2022.06.15 2、来源&#xff1a;整理自Wind 3、指标&#xff1a;华证ESG&#xff08;只有综合评级&#xff0c;无细分评级数据&#xff09; 4、样本数量&#xff1a;A股4800多家公司 …...

【大数据模型】LeonardoAi让心中所想跃然纸上

汝之观览&#xff0c;吾之幸也&#xff01; 本文主要聊聊LeonardoAi绘图工具 一、注册Discord账号 不管LeonardoAi还是midjourney&#xff0c;都需要注册一个Discord账号&#xff0c;Discord是一个社区软件&#xff0c;在这里可以进行讨论和交流使用心得 LeonardoAi官网地址 …...

如何区别BI、大数据、信息化和数字化转型

商业智能BI可以实现业务流程和业务数据的规范化、流程化、标准化&#xff0c;打通ERP、OA、CRM等不同业务信息系统&#xff0c;整合归纳企业数据&#xff0c;利用数据可视化满足企业不同人群对数据查询、分析和探索的需求&#xff0c;从而为管理和业务提供数据依据和决策支持。…...

ESP32-C2开发板Homekit例程

准备 1.1硬件ESP32 C2开发板&#xff0c;如图1-1所示 图1-1 ESP32 C2开发板 1.2软件 CozyLife APP可以在各大应用市场搜索下载&#xff0c;也可以扫描二维码下载如图1-2所示 HomeKit flash download tool 烧录工具 esp32c2 homkit演示固件 烧录教程 打开flash_download_to…...

快速搭建一个 Kubernetes+Crane 环境,以及如何基于 Crane 优化你的集群和应用初体验

文章目录 一、活动介绍二、环境搭建三、安装本地的 Kind 集群和 Crane 组件四、界面截图五、主要功能六、整体架构七、Crane的优势八、总结参考文献 一、活动介绍 Crane 是由腾讯云主导开源的国内第一个基于云原生技术的成本优化项目&#xff0c;遵循 FinOps 标准&#xff0c;…...

深度学习图像识别模型:递归神经网络

深度学习是一种人工智能技术&#xff0c;它用于解决各种问题&#xff0c;包括自然语言处理、计算机视觉等。递归神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是深度学习中的一种神经网络模型&#xff0c;主要用于处理序列数据&#xff0c;例如文本…...

上门家教预约小程序开发 良师就在你身边

社会的发展科技的进步让人们对教育的重视度也逐渐升高&#xff0c;很多家长可以说是为了孩子的教育操碎了心。在学校还好有老师辅导&#xff0c;节假日在家的时候&#xff0c;很多家长自己本身文化知识有限或者工作繁忙没有时间辅导&#xff0c;送去辅导班来回接送又很麻烦&…...

CMake Practice 学习笔记五--cmake常用变量

这里列举一些cmake常用变量&#xff0c;后面带**表示常用&#xff0c;了解下&#xff0c;不用全部记住。 1、CMAKE_BINARY_DIR PROJECT_BINARY_DIR ** <projectname>_BINARY_DIR 这三个变量指代的内容是一样的&#xff0c;如果是 in source 编译,指的就是工程顶层目…...

Facebook 广告效果越来越差,怎么办?

在如今的数字营销领域中&#xff0c;Facebook作为独立站卖家首选的推广引流平台&#xff0c;具备了许多优势。 一方面&#xff0c;Facebook拥有庞大的用户数量&#xff0c;是全球最大的社交媒体平台之一。另一方面&#xff0c;Facebook的广告算法可以将广告推送给更加精准的受…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

2025.6.9总结(利与弊)

凡事都有两面性。在大厂上班也不例外。今天找开发定位问题&#xff0c;从一个接口人不断溯源到另一个 接口人。有时候&#xff0c;不知道是谁的责任填。将工作内容分的很细&#xff0c;每个人负责其中的一小块。我清楚的意识到&#xff0c;自己就是个可以随时替换的螺丝钉&…...

CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx

“Reactive Stream Processing in Industrial IoT using DDS and Rx” 是指在工业物联网&#xff08;IIoT&#xff09;场景中&#xff0c;结合 DDS&#xff08;Data Distribution Service&#xff09; 和 Rx&#xff08;Reactive Extensions&#xff09; 技术&#xff0c;实现 …...

Ubuntu 可执行程序自启动方法

使用 autostart&#xff08;适用于桌面环境&#xff09; 适用于 GNOME/KDE 桌面环境&#xff08;如 Ubuntu 图形界面&#xff09; 1. 创建 .desktop 文件 sudo vi ~/.config/autostart/my_laser.desktop[Desktop Entry] TypeApplication NameMy Laser Program Execbash -c &…...

Go 语言中的内置运算符

1. 算术运算符 注意&#xff1a; &#xff08;自增&#xff09;和--&#xff08;自减&#xff09;在 Go 语言中是单独的语句&#xff0c;并不是运算符。 package mainimport "fmt"func main() {fmt.Println("103", 103) // 13fmt.Println("10-3…...