Spring boot注解学习

1、@SpringBootApplication

 spring boot 核心注解,加在Spring boot 主类之上,是@Configuration、@EnableAutoConfiguration、@ComponentScan 注解的集合。
 (1)@Configuration:允许以@Bean注解将对象托管给spring容器,即支持将@Bean注解的方法返回的对象控制反转。
 (2)@EnableAutoConfiguration:启用Spring boot自动配置,Spring boot的一大特色就是无需在xml中定义大量配置,开箱即用,原理是使用了将一些常用的配置进行了默认配置,这个注解实现了自动配置这一功能,是Spring boot的核心。
 (3)@ComponentScan:扫描与Spring boot 主类被@Component(@Controller、@Service、@Repository、@RestController)注解的类,放入spring boot 容器之中,实现控制反转。由于默认扫描的范围过小,通常会在主类上在声明一个@ComponentScan,扩大扫描范围。如下:

@SpringBootApplication
@ComponentScan("com.liner")
public class ServerApplication {public static void main(String[] args) {SpringApplication.run(ServerApplication.class, args);}}

  上面的代码主动声明了一个@ComponentScan注解,扩大扫描范围至com.liner包下所有的类

2、@Component(@Controller、@Service、@Repository、@RestController)

 Spring boot 应用面最广,最基础的注解。作用域为:类。会构建该类的对象,放入spring容器中,实现控制反转。
 (1)@Controller & @RestController:控制层注解。用于接收外部请求的接口类上,提供服务,通常只进行参数校验,不过多处理业务,核心业务由service层处理。
  【1】@Controller:在早期的应用中,前后端不分离,Spring boot 应用会返回一个视图,而不是json之类的纯数据,这个时候会使用@Controller。后续出现了前后端分离,不再需要返回视图,而是格式化后的纯数据,这时会在接口方法上加入@ResponseBody注解。
  【2】@RestController:整合了@Controller和@ResponseBody。前后端分离时代产物,使得接口类只返回格式化数据,不返回视图。
 (2)@Service:业务层注解,用于处理核心业务逻辑的类上。
 (3)@Repository:数据层注解。用于进行数据存入取出的持久层,也就是常说的Dao层。Dao层通常只处理查询、写入数据的简单sql,不与业务耦合。

3、@Autowired、@Resource、@Qualifier

  有了控制反转的注解,自然也得有使用控制反转对象的方法,那就是依赖注入,@Autowired、@Resource、@Qualifier就是将Spring 容器中的对象注入到程序中的注解,通常用无属性类中的成员变量之上。
 (1)@Autowired:按类型注入,当Spring 容器中只有该类型的对象时可用。如果Spring 容器有该类型派生的不同类型对象(子类)时,那么在spring boot 启动过程中会发生错误。
 (2)@Resource:按名称注入,不可指定对象名称,注入的对象与被注解变量名称相同。
 (3)@Qualifier:按对象名注入,可通过设置value属性决定对象名称。需要与@Autowired、@Resource搭配使用。相当于@Resource的扩展,更加灵活,可以解除变量名称与对象名必须相同的限制。当与@Autowired搭配使用时,必须设置value;与@Resource搭配使用时,可不设置value,不过通常不会这么用,一个@Resource已经满足需求了。用法如下,两个变量实际上都注入了名为user的对象

    @Autowired@Qualifier("user")private User user1;@Resource//不指定value时,@Qualifier可以省略,@Resource@Qualifierprivate User user;

 注:@Qualifier与@Resource的不同
  【1】来源不同。@Resource是jdk自带的注解,来自javax.annotation包,而@Qualifier则是来自springframework,在org.springframework.beans.factory.annotation包下面
  【2】@Qualifier功能是@Resource的扩展,可通过指定value对象确定注入的是哪个对象,不必拘泥于变量名称,更加灵活。

4、@ConfigurationProperties注解

  通常作用于有属性的类上,指定前缀,将yml文件中的属性注入到类的成员变量中,并将生成的对象托付给spring容器,用法如下:
【1】首先是yml文件配置:

myuser:id: 1name: liner

【2】其次是注解的使用:

@ConfigurationProperties(prefix = "myuser")
public class User{private int id;private String name;public int getId() {return id;}public String getName() {return name;}public User() {}public void setId(int id) {this.id = id;}public void setName(String name) {this.name = name;}
}

 注意:
  【1】要注入的成员变量必须提供set方法,否则无法注入。
  【2】定义在yml中的user.name属性不会生效,因为user.name是Java的一个系统属性,会获取当前操作系统用户的名称。并注入到被@ConfigurationProperties(prefix = “user”)注解的类的name属性当中。下图中的name属性不会生效

user:name: test

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/25709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基本表的定义:创建表、修改表、删除表

一、创建数据库与打开数据库 学生选课数据库 学生(学号,姓名,性别,出生时间,所在系) 课程(课程编号,课程名,先修课程号) 选课(学号&#xff0…

Java File IO

Java File IO ~主要介绍四个类 InputStream OutputStream FileReader FileWriter~ InputStream (字节流读取File) public static void main(String[] args) throws IOException {String filePath "D:\\Javaideaporject\\JavaBaseSolid8\\File\\t…

js调试过程中修改变量值

1.在想要变更的地方添加断点 2.添加监视表达式 3.执行网页代码,当执行到断点处则会停止 4.点击执行下一步,则会执行监视表达式

19、关于加强行政事业单位数据资产管理的通知

党中央有关部门,国务院各部委、各直属机构,全国人大常委会办公厅,全国政协办公厅,最高人民法院,最高人民检察院,各民主党派中央,有关人民团体,各省、自治区、直辖市、计划单列市财政厅(局),新疆生产建设兵团财政局,有关中央管理企业: 为贯彻落实《中共中央 国务…

Linux下打印封装_统计函数执行时间_线程号时间戳打印

统计函数执行时间(多线程环境下统计结果不准) // 无返回值 #define FUNC_EXEC_TIME_NORET(fun,promote) ({ \ unsigned long long timeDelta 0; \ struct timespec t1 {0}; \ struct timespec t2 {0}; \ clock_gettime(CLOCK_MONOTONIC, &t1); \ …

web3规则改变者:Linea的厉害之处

Linea 的厉害之处 想象一下,Linea 就像是一条神奇的高速公路,它让开车(在这里指的是交易)变得更快、更便宜,而且还很舒服。Linea 是由一个叫 Consensys 的大公司建造的,它用了一些超级酷的技术&#xff0c…

托盘图标结构体TBBUTTON和TRAYDATA相关说明文章记录

1、托盘图标管理器与跨进程SendMessage :http://www.qingfengju.com/article.asp?id294 2、TrayData 结构详解:http://llll123cccc.blog.163.com/blog/static/316586420105864647151/ 3、Shell Tray Info - Arrange your system tray icons&#xff1…

高考分数查询结果自动推送至微信(卷II)

祝各位端午节安康!只要心中无结,每天都是节,开心最重要! 在上一篇文章高考分数查询结果自动推送至微信(卷Ⅰ)-CSDN博客中谈了思路,今天具体实现。文中将敏感信息已做处理,读者根据自…

从零开始精通Onvif之获取设备信息

💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。 与设备交互的第一步 发现设备之后,与设备进行交互的第一步,是连接上设备,并获取设备的信息。连接设备&#…

FiRa标准之认证流程

在实现FiRa MAC时需要考虑其兼容性,同时对外部而言,如何证明一个UWB设备是否满足FiRa的规范要求,就需要通过一定的组织对相应的设备进行检测、认证。 为此,FiRa联盟已经建立了国际认证程序,制定了验证待检设备&#x…

React+TS前台项目实战(四)-- layout整体布局搭建

文章目录 前言一、Layout组件代码注释说明二、Content全局组件注释说明三、Header基础布局组件1. Header父级组件注释说明2. NavMenu导航子组件详细说明 四、效果展示总结 前言 本文主要讲Layout整体布局的构建以及全局内容盒子Content组件的使用。还包括了导航栏组件的基本封…

【QT】QT6.3新特性,以及使用技巧

Qt 6.3作为Qt框架的一个重要更新,引入了许多新特性和改进,以提高开发效率和应用程序性能。以下是一些使用Qt 6.3的技巧和最佳实践: 利用新模块和特性: 了解并利用Qt 6.3中新增的模块和特性,例如Qt Quick 3D、Qt PDF等&…

未来几年,同样的性能,推理功耗降低为现在的几万分之一,有可能吗

未来几年,同样的性能,推理功耗降低为现在的几万分之一,有可能吗 一.数据二.抓取LLM排行榜,相同的MMLU精度,模型参数量缩减倍数三.其它 有人说未来几年,推理功耗能降低为现在的几万分之一,好奇怎么能做到呢 一.数据 二.抓取LLM排行榜,相同的MMLU精度,模型参数量缩减倍数 import…

spool 管道 小文件 mknod

Spool File In SQL*PLUS in Multiple Small Files ? (Doc ID 2152654.1)​编辑To Bottom In this Document Goal Solution APPLIES TO: Oracle Database - Enterprise Edition - Version 10.2.0.1 to 12.1.0.2 [Release 10.2 to 12.1] Oracle Database Cloud Schema Service…

从零开始搭建Electron项目之运行例程

最好的学习方式就是:给一段能够运行的代码示例。 本文给出了例程资源,以及运行的步骤。 在国内开发electron有一点特别不好,就是如果不爬梯子,下载依赖容易出错。 一、例程资源 到如下路径下载例程到本地。 GitCode - 全球开发者…

32、matlab:基于模板匹配的车牌识别

1、准备工作 1)准备材料 车牌字符模板和测试的实验车牌 2)车牌字符模板 数字、字母和省份缩写 3)测试车牌 四张测试车牌 2、车牌识别实现(已将其嵌入matlab) 1)打开APP 找到APP 找到我的APP双击点开 2)界面介绍 包括&am…

C语言考试内容

C语言考试通常会涵盖以下几个主要方面: 1. **基本概念**: - C语言的历史和特点 - C语言的编译过程 - 程序的基本结构(包括预处理指令、主函数main()、函数定义等) 2. **数据类型和运算符**: - 基本数据类…

一起学习Linux内核模块的知识,为编写复杂的设备驱动做好准备

一、Linux内核模块简介 Linux内核的整体架构非常庞大,包含的组件非常多,如果把所有的功能都编译到内核,有导致生成的内核映像越来越大,同时如果我们要修改现有内核的功能,需要重编内核,效率很低。 有没有…

【网络安全的神秘世界】web应用程序安全与风险

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 第一章:web应用程序安全与风险 web攻击基础知识 1、什么是web应用攻击 web攻击的本质,就是通过http协议篡改应用程序&#xff0…

c#自定义ORM框架-实体类扩展属性

步骤一、建立扩展属性类 实体类扩展属性要继承Attribute基类完成 步骤二、创建实体类并引用扩展实体类属性 Attributes属性定义&#xff0c;主要标明表名和主键名字 /// <summary> /// 表名 /// </summary> [AttributeUsage(AttributeTargets.Class)] [System.S…