Spring常用注解说明
目录
1.常用注解
2.特别说明
3.xml及注解方式
1.常用注解
(1)
- @SpringBootApplication
(2)
- @Controller
- @RestController
- @RequestMapping
- @RequestParam
- @PathVariable
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
- @ResponseBody
- @RequestBody
- @CrossOrigin
(3)
- @Configuration
- @Bean
- @Service
- @Component
- @ComponentScan
- @PropertySource
- @Import
- @Primary
- @Profile
- @Scope
- @Lazy
- @PostConstruct
- @PreDestory
(4)
- @Autowired
- @Resource
- @Autowired+@Qualifier
- @Values
2.特别说明
@ResponseBody:标注在controller的方法上不会走视图解析,直接将后端的返回值显示在画面上。如果没有添加此注解,并且返回的不是视图的场合,则会报404的错误。
@CrossOrigin:在Controller的方法上使用,是为了解决跨域问题。但是在每个方法上添加比较麻烦,一般使用过滤器的方式。
@Autowired:按照类型进行bean的注入。如果同一个bean的类型有多个,尝试按照名字进行二次匹配,匹配不成功则会报错。
例:
@Autowired
private UserDao userDao;
首先会按照类型UserDao进行注入,如果只有一个则注入成功,如果有多个,则按照名字userDao进行注入,此时如果只找到一个则注入成功,如果查找不到,则注入失败。
@Resource:不指定名称参数时,按照类型进行注入,指定名称参数时按照名称进行bean的注入。添加name属性指定bean的名字。
例:
@Resource
private UserDao userDao;
没有指定名字,按照类型进行bean的注入。
@Resource(name="userDao2")
private UserDao userDao;
指定了要注入的bean的名字,按照此类型下的此名称进行注入。
@Autowired+@Qualifier:按照名字进行bean的注入,使用时在@Qualifier中添加name属性指定bean的名字。
例:
@Autowired
@Qualifier("userDao2")
private UserDao userDao;
如果根据类型查找到多个bean,此时使用@Qualifier注解指定要注入bean的名字,来完成bean的注入。
@Configuration+@Bean:一般用于在配置文件中注册bean,bean的名字默认是方法名,可以通过name属性来指定bean的名字。bean的类型为方法的返回值的类型。
@Configuration标注这是一个配置类,并将此配置类交由spring容器进行管理。配合@Bean注解完成第三方bean的注入。
@Values:用于注入普通数据,一般是将配置文件中的参数注入到代码中的某个项目。在要注入项目的代码中使用@RefreshScope实现配置文件的动态刷新,即配置文件的内容修改之后,不用重启服务,代码中能够获取到最新的配置文件中的内容。
@Autowired注解添加在方法上的使用
例1:
@Autowired
public void getList(List<UserDao> daoList){System.out.println(list);
}
上述方法的执行过程:从容器中查找UserDao类型的bean,将找到的bean存放在daoList集合中。在开发中常使用此方法将不多的策略实例化到一个map中,然后根据key值取出对应的策略进行处理。
例2:
@Autowired
public void getList(UserDao userDao){System.out.println(userDao);
}
上述方法的执行过程:从容器中查找UserDao类型的bean,找到多个的场合,再按照名字即userDao来匹配,将找到的bean放在userDao中进行使用。
@Bean注解:用来注入第三方bean。
例1:
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
@Component
public class OtherBean {@Bean("datasource")
public DataSource dataSource(@Value("${jdbc.driver}") String driverClassName@Autowired UserDao userDao) {
DruidDataSource dataSource = new DruidDataSource();
//设置4个基本参数..
return dataSource;}
}
bean的名字如果不指定为方法名,如果指定则按照指定的名字。bean的类型为方法的返回值类型。为了确保@Bean注解能够被spring容器扫描到,必须添加@Component注解,将此类交由spring容器管理。
可以通过@Value注解为第三方bean注入参数,在bean内部进行使用。
也可以通过@AutoWired注解将其他bean注入到参数中。@AutoWired注解可以省略。默认按照类型进行bean的注入。
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
@Component
public class OtherBean {@Bean("datasource")
public DataSource dataSource(@Value("${jdbc.driver}") String driverClassName@Qualifier("userDao2") UserDao userDao) {
DruidDataSource dataSource = new DruidDataSource();
//设置4个基本参数..
return dataSource;}
}
可以直接使用@Qualifier注解指定bean的名称,按照bean的名称进行注入。在此,可以不用结合@Autowired进行使用。自定bean的注入,如在controller中注入service时,这两个注解必须结合使用。
@ComponentScan:指定spring容器进行扫描的包路径,并将扫描到的bean交由spring进行管理。扫描的是指定包及其子包,不配置包路径的时候,会默认扫描此配置类所在的包及其子包。在现在的springboot项目中,默认扫描的包路径是spring boot启动类所在的包及其子包,所以一般是不用此注解去配置扫描路径的。
@PropertySource:用于加载外部的properties资源配置,加载之后可以通过@Value注解对其中的内容进行使用。
@Import:导入其他配置,比如说之前的第三方bean的注入,可以去掉类上的@Compent注解,通过import方式进行导入。
@Import(OtherConfig.class)
@Primary:当同一个bean类型下有多个bean,当其中一个bean添加了此注解,则直接注入此bean。
@Primary注解用于标注相同类型的Bean优先被使用权,@Primary 是Spring3.0引入的,与@Component和@Bean一起使用,标注该Bean的优先级更高,则在通过类型获取Bean或通过@Autowired根据类型进行注入时会选用优先级更高的。

@Profile 注解的作用同于xml配置时学习profile属性,是进行环境切换使用的。
注解@Profile 标注在类或方法上,标注当前产生的Bean从属于哪个环境,只有激活了当前环境,被标的Bean才能被注册到Spring容器里,不指定环境的Bean,任何环境下都能注册到Spring容器里。
可以使用以下两种方式指定被激活的环境:
使用命令行动态参数,虚拟机参数位置加载 -Dspring.profiles.active=test
使用代码的方式设置环境变量 System.setProperty("spring.profiles.active","test");

@Scope在类上或使用了@Bean标注的方法上,标注Bean的作用范围,取值为singleton或prototype等。
@Lazy在类上或使用了@Bean标注的方法上,标注Bean是否延迟加载,取值为true或false,默认为true
@PostConstruct在方法上使用,标注Bean的实例化后执行的方法。
@PreDestory在方法上使用,标注Bean的销毁前执行方法。
3.xml及注解方式
在使用xml开发方式下,通过如下方式加载xml配置文件,配置文件主要是bean的设置,包扫描的配置及外部配置文件扫描等等。
new ClassPathXmlApplicationContext("applicationContext.xml")
在使用注解开发方式下,通过如下方式加载主配置,主配置中也设置了bean的扫描位置,外部资源的导入及其他配置的引入等等。
new AnnotationConfigApplicationContext (SpringConfig.class);
相关文章:
Spring常用注解说明
目录 1.常用注解 2.特别说明 3.xml及注解方式 1.常用注解 (1) SpringBootApplication (2) ControllerRestControllerRequestMappingRequestParamPathVariableGetMappingPostMappingPutMappingDeleteMappingResponseBodyRequestBodyCrossOrigin (3) ConfigurationBeanServ…...
13-C++面向对象(纯虚函数(抽象类)、多继承、多继承-虚函数、菱形继承、虚继承、静态成员)
虚析构函数 存在父类指针指向子类对象的情况,应该将析构函数声明为虚函数(虚析构函数) 纯虚函数 纯虚函数:没有函数体且初始化为0的虚函数,用来定义接口规范 抽象类: 含有纯虚函数的类,不可以实…...
Android DataBinding 自定义View实现数据双向绑定
看不懂的可以先看看单向数据绑定:Android DataBinding数据变化时自动更新界面_皮皮高的博客-CSDN博客 然后再确定已经启动了dataBinding的情况下,按下面的顺序来: 首先创建一个自定义View: import android.content.Context imp…...
网络安全中的渗透测试主要那几个方面
渗透测试中主要有软件测试和渗透测试。 1、测试对象不同 软件测试:主要测试的是程序、数据、文档。 渗透测试:对象主要为网络设备、主机操作系统、数据库系统和应用系统。 2、测试内容不同 软件测试:主要工作内容是验证和确认,发…...
Cursor:GPT-4 驱动的强大代码编辑器
Cursor (https://www.cursor.so/)是 GPT-4 驱动的一款强大代码编辑器,可以辅助程序员进行日常的编码。下面通过一个实际的例子来展示 Cursor 如何帮助你编程。这个例子做的事情是网页抓取。抓取的目标是百度首页上的百度热搜,如下…...
C/C++中for语句循环用法及练习
目录 语法 下面是 for 循环的控制流: 实例 基于范围的for循环(C11) 随堂笔记! C语言训练-计算1~N之间所有奇数之和 题目描述 输入格式 输出格式 样例输入 样例输出 环形方阵 干货直达 for 循环允许您编写一个执行特定次数的循环的重复控制结构。…...
AnimatorOverrideController说明
unity-AnimatorOverrideControllerhttps://docs.unity.cn/cn/current/ScriptReference/AnimatorOverrideController.html 用于控制动画器重写控制器的接口。 动画器重写控制器的用途是重写某个控制器的动画剪辑,从而为给定化身定制动画。 在运行时基于相同的 Anim…...
1.4、第三阶段 MySQL数据库
root数据库技术 一、数据库理论 1 什么是数据库技术 数据库技术主要研究如何组织、存储数据,并如何高效地提取和处理数据。 2 什么是SQL SQL(Structured Query Language)结构化查询语言 SQL是操作数据库的命令集,也是功能齐全的…...
LeetCode:202. 快乐数
🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀算法专栏: 👉🏻123 一、🌱202. 快乐数 题目描述:编写一个算法来判断一个数 n 是不是快…...
Android 14 新功能之 HighLights:快速实现文本高亮~
日常开发中可能会遇到给 TextView 的全部或部分文本增加高亮效果的需求,以前可能是通过 Spannable 或者 Html 标签实现。 升级 Android 14 后就不用这么迂回了,因其首次引入直接设置高亮的 API:HighLights。需要留意的是 HighLights API 和 …...
[渗透教程]-004-嗅探工具-Nmap
文章目录 Nmap介绍基本操作进阶操作Nmap介绍 nmap是一个网络扫描和主机检测工具,它可以帮助用户识别网络上的设备和服务。获取主机正在运行哪些服务,nmap支持多种扫描,UDP,TCP connect(),TCP SYN(半开扫描) ftp代理,反向标志,ICMP,FIN,ACK扫描,ftp代理,反向标志,ICMP. 可以用于…...
大数据技术之Hive SQL题库-初级
第一章环境准备1.1 建表语句hive>-- 创建学生表 DROP TABLE IF EXISTS student; create table if not exists student_info(stu_id string COMMENT 学生id,stu_name string COMMENT 学生姓名,birthday string COMMENT 出生日期,sex string COMMENT 性别 ) row format delim…...
常见HTTP状态码汇总
文章目录1xx: 信息2xx: 成功3xx: 重定向4xx: 客户端错误5xx: 服务器错误1xx: 信息 状态码描述100 Continue服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。101 Switching Protocols服务器转换协议:服…...
蓝桥杯刷题冲刺 | 倒计时15天
作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.年号字串2.裁纸刀3.猜生日1.年号字串 题目 链接: 年号字串 - 蓝桥云课 (lanqiao.c…...
【差分数组】
差分数组一维差分差分数组的作用差分矩阵结语一维差分 输入一个长度为 n 的整数序列。接下来输入 m个操作,每个操作包含三个整数 l,r,c,表示将序列中 [l,r] 之间的每个数加上 c ,请你输出进行完所有操作后的序列。 输入格式 第一行包含两个…...
2022年NOC软件创意编程(学而思)决赛小学高年级组scratch
2022NOC决赛图形化小高组 一、选择题 1.运行下面的程序,最终“我的变量”的值是多少? 2.希望定义一个函数如下,可以让角色旋转指定的圈数。里面空缺的地方填上什么数字比较合适? 3.运行程序,在舞台上可以看见几个角色 ? 4.运行程序,角色会依次说什么 ? 5.我们都知…...
[JAVA]一步接一步的一起开发-图书管理系统(非常仔细,你一定能看懂)[1W字+]
目录 1.想法 2.框架的搭构 2.1图书 2.1.1Book类 2.1.2BookList类 2.2用户 2.2.1User抽象类 2.2.2AdminUser类(管理者) 2.2.3NormalUser 2.3操作 操作接口 借阅操作 删除操作 查询操作 归还图书 展示图书 退出系统 2.4小结 3.主函数的编…...
大数据周会-本周学习内容总结07
目录 01【hadoop】 1.1【编写集群分发脚本xsync】 1.2【集群部署规划】 1.3【Hadoop集群启停脚本】 02【HDFS】 2.1【HDFS的API操作】 03【MapReduce】 3.1【P077- WordCount案例】 3.2【P097-自定义分区案例】 历史总结 01【hadoop】 1.1【编写集群分发脚本xsync】…...
搭建一个双系统个人服务器
搭建一个双系统个人服务器0.前言一、双系统安装1.磁盘划分2.windows安装3.ubuntu安装二、系统启动项美化:1. refind引导2. 美化 grub 界面三、系统代理0.前言 年后找了份工作,忙于适应新环境所以更新也减缓了,最近闲暇时间给个人电脑进行了整…...
电脑长按电源键强行关机,对SSD有伤害吗?SSD 掉盘之殇
说到“按住电源键强制关机”的操作,想必大家都不会陌生,毕竟在电脑蓝屏或者电脑死机的时候,我们总是束手无策。而且,身边的人在遇到同样的情况时,往往都是选择长按电源键强制关机,所以当我们遇到同样的情况…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
