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

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++面向对象(纯虚函数(抽象类)、多继承、多继承-虚函数、菱形继承、虚继承、静态成员)

虚析构函数 存在父类指针指向子类对象的情况&#xff0c;应该将析构函数声明为虚函数&#xff08;虚析构函数&#xff09; 纯虚函数 纯虚函数&#xff1a;没有函数体且初始化为0的虚函数&#xff0c;用来定义接口规范 抽象类&#xff1a; 含有纯虚函数的类&#xff0c;不可以实…...

Android DataBinding 自定义View实现数据双向绑定

看不懂的可以先看看单向数据绑定&#xff1a;Android DataBinding数据变化时自动更新界面_皮皮高的博客-CSDN博客 然后再确定已经启动了dataBinding的情况下&#xff0c;按下面的顺序来&#xff1a; 首先创建一个自定义View&#xff1a; import android.content.Context imp…...

网络安全中的渗透测试主要那几个方面

渗透测试中主要有软件测试和渗透测试。 1、测试对象不同 软件测试&#xff1a;主要测试的是程序、数据、文档。 渗透测试&#xff1a;对象主要为网络设备、主机操作系统、数据库系统和应用系统。 2、测试内容不同 软件测试&#xff1a;主要工作内容是验证和确认&#xff0c;发…...

Cursor:GPT-4 驱动的强大代码编辑器

Cursor &#xff08;https://www.cursor.so/&#xff09;是 GPT-4 驱动的一款强大代码编辑器&#xff0c;可以辅助程序员进行日常的编码。下面通过一个实际的例子来展示 Cursor 如何帮助你编程。这个例子做的事情是网页抓取。抓取的目标是百度首页上的百度热搜&#xff0c;如下…...

C/C++中for语句循环用法及练习

目录 语法 下面是 for 循环的控制流&#xff1a; 实例 基于范围的for循环(C11) 随堂笔记&#xff01; C语言训练-计算1~N之间所有奇数之和 题目描述 输入格式 输出格式 样例输入 样例输出 环形方阵 干货直达 for 循环允许您编写一个执行特定次数的循环的重复控制结构。…...

AnimatorOverrideController说明

unity-AnimatorOverrideControllerhttps://docs.unity.cn/cn/current/ScriptReference/AnimatorOverrideController.html 用于控制动画器重写控制器的接口。 动画器重写控制器的用途是重写某个控制器的动画剪辑&#xff0c;从而为给定化身定制动画。 在运行时基于相同的 Anim…...

1.4、第三阶段 MySQL数据库

root数据库技术 一、数据库理论 1 什么是数据库技术 数据库技术主要研究如何组织、存储数据&#xff0c;并如何高效地提取和处理数据。 2 什么是SQL SQL&#xff08;Structured Query Language&#xff09;结构化查询语言 SQL是操作数据库的命令集&#xff0c;也是功能齐全的…...

LeetCode:202. 快乐数

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340;算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 一、&#x1f331;202. 快乐数 题目描述&#xff1a;编写一个算法来判断一个数 n 是不是快…...

Android 14 新功能之 HighLights:快速实现文本高亮~

日常开发中可能会遇到给 TextView 的全部或部分文本增加高亮效果的需求&#xff0c;以前可能是通过 Spannable 或者 Html 标签实现。 升级 Android 14 后就不用这么迂回了&#xff0c;因其首次引入直接设置高亮的 API&#xff1a;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服务器仅接收到部分请求&#xff0c;但是一旦服务器并没有拒绝该请求&#xff0c;客户端应该继续发送其余的请求。101 Switching Protocols服务器转换协议&#xff1a;服…...

蓝桥杯刷题冲刺 | 倒计时15天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.年号字串2.裁纸刀3.猜生日1.年号字串 题目 链接&#xff1a; 年号字串 - 蓝桥云课 (lanqiao.c…...

【差分数组】

差分数组一维差分差分数组的作用差分矩阵结语一维差分 输入一个长度为 n 的整数序列。接下来输入 m个操作&#xff0c;每个操作包含三个整数 l,r,c&#xff0c;表示将序列中 [l,r] 之间的每个数加上 c &#xff0c;请你输出进行完所有操作后的序列。 输入格式 第一行包含两个…...

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类&#xff08;管理者&#xff09; 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安装二、系统启动项美化&#xff1a;1. refind引导2. 美化 grub 界面三、系统代理0.前言 年后找了份工作&#xff0c;忙于适应新环境所以更新也减缓了&#xff0c;最近闲暇时间给个人电脑进行了整…...

电脑长按电源键强行关机,对SSD有伤害吗?SSD 掉盘之殇

说到“按住电源键强制关机”的操作&#xff0c;想必大家都不会陌生&#xff0c;毕竟在电脑蓝屏或者电脑死机的时候&#xff0c;我们总是束手无策。而且&#xff0c;身边的人在遇到同样的情况时&#xff0c;往往都是选择长按电源键强制关机&#xff0c;所以当我们遇到同样的情况…...

Linux:centos内核优化详解

一、系统内核部分设置在以下文件 vim /etc/sysctl.conf 1.禁用IPV6 net.ipv6.conf.all.disable_ipv6 1 # 禁用整个系统所有接口的IPv6 net.ipv6.conf.default.disable_ipv6 1 net.ipv6.conf.lo.disable_ipv6 1 # 禁用某一个指定接口的IPv6(此处为:lo) 理想情况下&#xff0c…...

链表经典OJ题合集(包含带环问题,相交问题,随机指针复制等,附动画讲解)

目录 一&#xff1a;前言 二&#xff1a;简单题目 (1)移除链表元素 (2)反转链表 (3)找链表的中间结点 (4)输入一个链表&#xff0c;输出该链表中倒数第k个结点 (5)合并两个有序链表 (6)相交链表 (7)判断链表是否带环 三&#xff1a;较难题目 (1)链表分割 (2)判断链表是否为回…...

CSS新增

系列文章目录 前端系列文章——传送门 CSS系列文章——传送门 文章目录系列文章目录什么是 CSS3渐进增强和优雅降级CSS3 中的选择器CSS3 中的背景CSS3 中的边框CSS3 中的文本效果CSS3 中的字体 font-face什么是 CSS3 CSS3是CSS&#xff08;层叠样式表&#xff09;技术的升级版…...

奇安信_防火墙部署_透明桥模式

奇安信_防火墙部署_透明桥模式一、预备知识二、项目场景三、拓扑图四、基本部署配置1. 登录web控制台2.连通性配置3.可信主机配置4.授权导入5.特征库升级6.安全配置文件五、透明桥配置1. 创建桥2. 端口绑定桥3. 创建桥端口六、结语一、预备知识 安全设备接入网络部署方式 二、…...

C语言——字符串函数(2)和内存函数

(一)strtok函数dilimiters参数是个字符串&#xff0c;定义了用作分隔符的字符集合第一个参数指定一个字符串&#xff0c;它包含了0个或者多个由dilimiters字符串中一个或者多个分隔符分割的标记。strtok函数找到str中的下一个标记&#xff0c;并将其用 \0 结尾&#xff0c;返回…...

第1节 线性回归模型

1. 模型概述 对于收集到的数据(xi,yi)(x_i,y_i)(xi​,yi​)&#xff0c;建立线性回归模型yiθTxiεi(1)y_i\theta^{^T} x_i \varepsilon_i (1)yi​θTxi​εi​(1) 需要估计的参数为θT\theta^{^T}θT&#xff0c;我们的目的是让估计的参数θT\theta^{^T}θT和xix_ixi​…...

CodeGeeX 130亿参数大模型的调优笔记:比FasterTransformer更快的解决方案

0x0 背景 相信大家都使用或者听说过github copilot这个高效的代码生成工具。CodeGeeX类似于github copilot&#xff0c;是由清华大学&#xff0c;北京智源研究院&#xff0c;智谱AI等机构共同开发的一个拥有130亿参数的多编程语言代码生成预训练模型。它在vscode上也提供了插件…...

Linux驱动之并发与竞争

文章目录并发与竞争的概念原子操作原子整形操作 API 函数原子位操作 API 函数自旋锁自旋锁简介自旋锁结构体自旋锁 API 函数自旋锁的注意事项读写自旋锁读写自旋锁的API顺序锁顺序锁的APIRCU(Read-Copy-Update)RCU的API信号量信号量API互斥体互斥体的API完成量(Completion)完成…...

【密码学复习】第四讲分组密码(三)

AES算法的整体结构 AES算法的轮函数 1&#xff09;字节代换&#xff08;SubByte&#xff09; 2&#xff09;行移位&#xff08;ShiftRow&#xff09; 3&#xff09;列混合&#xff08;MixColumn&#xff09; 4&#xff09;密钥加&#xff08;AddRoundKey&#xff09;1-字节代换…...

JVM(内存划分,类加载,垃圾回收)

JVMJava程序&#xff0c;是一个名字为Java 的进程&#xff0c;这个进程就是所说的“JVM”1.内存区域划分JVM会先从操作系统这里申请一块内存空间&#xff0c;在这个基础上再把这个内存空间划分为几个小的区域在一个JVM进程中&#xff0c;堆和方法区只有一份&#xff1b;栈和程序…...

怎么自己弄网站/苏州网站seo优化

一、前言 在数据库中&#xff0c;慢查询日志通常是用来进行优化数据库&#xff0c;MySQL中存在慢查询&#xff0c;Mongodb中也是如此。 在Mongo中的慢查询属于Mongo Database Profiler&#xff0c;而且其信息详细。 接下来介绍下Mongo慢查询 二、开启 Profiling 功能 开启并控…...

南昌网站设计制作/百度平台客服电话是多少

过去一年中&#xff0c;花了很多时间在考虑服务器架构设计方面的问题。看了大量文章、也研究了不少开源项目&#xff0c;眼界倒是开阔了不少&#xff0c;不过回过头来看&#xff0c;对网游架构设计方面的帮助却是不多。老外还是玩儿console game的多&#xff0c;MMO Games方面涉…...

资讯网站的好处/软件培训机构

点击下载所需插件资源 密码&#xff1a;h6j5 eclipse安装插件方式一&#xff1a;直接将所需插件放在eclipse安装目录的plugins路径里 方式二&#xff1a;将插件单独存放在一个地方 然后在eclipse的dropins目录下面新建一个连接文件指向插件的路径 插件所在路径…...

营销型网站建设风格设定包括哪些方面?/德芙巧克力的软文500字

记住&#xff0c;表达式是值和操作符的组合&#xff0c;它们可以通过求值成为单个值。“数据类 型”是一类值&#xff0c;每个值都只属于一种数据类型。表 1-2 列出了Python 中最常见的数据类型。例如&#xff0c;值-2 和 30 属于“整型”值。整型&#xff08;或 int&#xff0…...

电子商务网站建设讯息/快速网站排名优化

tomcat超时解问题 在eclipse启动tomcat时遇到超时45秒的问题&#xff1a; 错误&#xff1a;Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds 错误提示就是我们限定了部署的时间导致的错误。改动 workspace\.metadata\.plugins\org.eclipse.wst.…...

wordpress 分类缩略图/北京seo加盟

项目需求&#xff1a;用uniapp开发微信小程序&#xff0c;直播界面做可拖动弹幕。 一、直播页面&#xff0c;微信小程序的<live-player>组件就是用来搭建直播的。 我的项目需求是从上一个页面点击后直接跳转进对应的直播间&#xff0c;所以这个界面一开始就需要是全屏播…...