当前位置: 首页 > 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;所以当我们遇到同样的情况…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

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"…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...