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 掉盘之殇
说到“按住电源键强制关机”的操作,想必大家都不会陌生,毕竟在电脑蓝屏或者电脑死机的时候,我们总是束手无策。而且,身边的人在遇到同样的情况时,往往都是选择长按电源键强制关机,所以当我们遇到同样的情况…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...