spring学习(1)

news2024/9/25 19:18:29

目录

一、是什么

二、IOC思想

 2.1 IOC创建对象的方式

三、Spring的配置 

 3.1 别名

3.2 Bean的配置

3.3 import

四、DI依赖注入 

4.1 构造器注入

4.2 Set方式注入【重点】

4.3 拓展方式注入 

 五、Bean的自动装配

5.1 byName自动装配

5.2 byType自动装配

5.3 注解实现自动配置

5.3.1 @Autowired

5.3.2 @Resource

5.3.3 @Resource和@Autowired的区别

5.3.4 @Qualifier

5.3.5 @Nullable


一、是什么

Spring是一个轻量级的控制翻转(IOC)面向切面编程(AOP)的框架。

  • 是一个开源的免费的框架(容器)
  • 是一个轻量级的、非入侵式的框架
  • 控制反转(IOC)、面向切面编程(AOP)!
  • 支持事务的处理,对框架整合的支持

二、IOC思想

控制反转是一种设计思想,通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IOC容器,起实现方法是依赖注入(DI)

对象由Spring创建,对象的属性由Spring容器设置。我们彻底不用在程序中去改动了,要实现不同的操作,只需要在xml配置文件中进行修改。

所谓的IOC,一句话搞定:对象由Spring来创建、管理、装配! 

 2.1 IOC创建对象的方式

1、使用【无参】构造创建对象,默认!

2、使用【有参】构造创建对象

①下标赋值

 

②通过类型创建(不建议使用!)

③通过参数名来设置

 

总结:在配置文件加载的时候,容器中管理的对象就已经初始化了!

三、Spring的配置 

 3.1 别名

添加了别名,我们也可以通过别名获取到这个对象

3.2 Bean的配置

1、id:bean的唯一标识符,也就是相当于我们学的对象名

2、class:bean对象所对应的全限定名(包名+类名)

3、name:也是别名,而且name可以同时取多个别名

 

4、scope:bean的作用域

① 单例模式(Spring默认机制)

② 原型模式:每次从容器中get的时候,都会产生一个新的对象

③ 其余的request、session、application这些只能在web开发中使用到!

5、autowired:自动装配

自动装配是Spring满足bean依赖的一种方式!

Spring会在上下文中自动寻找,并自动给bean装配属性

(详见下文)

3.3 import

 一般用于团队开发使用,它可以将多个配置文件,导入合并为一个

四、DI依赖注入 

  • 依赖:bean对象的创建依赖容器
  • 注入:bean对象中的所有属性,由容器来注入

4.1 构造器注入

(上文提及) 

4.2 Set方式注入【重点】

 

4.3 拓展方式注入 

可以使用p命名空间和c命名空间进行注入

P命名空间注入,可以直接注入属性的值:property

C命名空间注入,通过构造器注入:construct-args

注意点:p命名空间和c命名空间不能直接使用,需要导入xml约束! 

 五、Bean的自动装配

在Spring中有三种装配方式:

  • 在xml中显式配置
  • 在java中显式配置
  • 隐式地自动装配bean【重要】

5.1 byName自动装配

 byName:会自动在容器上下文中寻找,和自己对象set方法后面的值对应的bean id!

 

5.2 byType自动装配

byType:会自动在容器上下文中查找,和自己对象属性类型相同的bean!(id甚至都可以省略!)

 

小结:

1、在byName时,需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致

2、在byType时,需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性类型一致

5.3 注解实现自动配置

使用注解前:

1、xml文件中导入context约束

2、xml文件中配置注解的支持

5.3.1 @Autowired

通过类型、名字自动装配

 直接在属性上使用,也可以在set方法上使用!

使用@Autowired我们可以不用编写Set方法了,前提是你这个自动装配的属性在IOC(Spring)容器中存在,且名字符合!

5.3.2 @Resource

通过名字、类型自动装配

5.3.3 @Resource和@Autowired的区别

  • 都是用来自动装配的,都可以放在属性字段上
  • @Autowired通过byType的方式实现,而且必须要求这个对象存在!不然报空指针
  • @Resource默认通过byName的方式实现,如果找不到名字,则通过byType实现!如果两个都找不到的情况下,就报错!

执行顺序不同:@Autowired通过byType的方式实现

                         @Resource通过byName的方式实现

 

5.3.4 @Qualifier

如果@Autowired不能唯一自动装配上属性,需通过该注释确定

配合@Autowired使用,指定一个唯一的bean对象注入! 

5.3.5 @Nullable

字段标记了这个注解,说明这个字段可以为null

相同作用:@Autowired(required = false)如果显式定义了Autowired的required属性为false,说明这个对象可以为null,否则不允许为空

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

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

相关文章

Vue小知识大杂烩

一、Vue组件的三大部分&#xff1a;template、Script、Style template --> 组件的模板结构 写html的地方 注意&#xff1a;<template> 是 vue 提供的容器标签&#xff0c;只起到包裹性质的作用&#xff0c;它不会被渲染为真正的 DOM 元素。 script -> 组件的…

超声波清洗机什么牌子值得入手? 清洁力好的超声波清洗机推荐

对于眼镜佩戴人士而言&#xff0c;超声波清洗机无疑是清洁神器&#xff01;它凭借高频振动技术&#xff0c;能深入眼镜的每一细微处及手洗难以触及的缝隙&#xff0c;有效清除顽固污渍&#xff0c;不仅大幅提高清洁效率&#xff0c;而且清洁质量远胜传统方法。随着超声波清洗机…

Linux下快速搭建七日杀官方私人服务器教程

今天给大家分享一下七日杀的个人开服教程&#xff0c;本教程基于Linux系统开发&#xff0c;推荐有一定基础的小伙伴尝试&#xff01;如果你没有Linux的基础但实在想开的小伙伴可以根据以下教程一步步进行操作&#xff0c;后续这边也会上架对应视频操作 架设前准备&#xff1a; …

Redis篇三:在Ubuntu下安装Redis

文章目录 1. 安装Redis2. 更改Redis的IP3. 使用redis自带的客户端来连接服务器4. Redis的客户端介绍 1. 安装Redis sudo apt install redis2. 更改Redis的IP 刚安装的Redis的ip是一个本地环回的ip&#xff0c;也就是只能由当前主机上的客户端进行访问&#xff0c;跨主机就访问…

IO进程线程 0823作业

作业 创建子父进程&#xff0c;子进程将1.txt内容拷贝到2.txt中&#xff0c;父进程将3.txt内容拷贝到4.txt中。 #include <myhead.h> int main(int argc, const char *argv[]) {pid_t ID;ID fork();if(ID > 0){int fd1;fd1 open("./3.txt",O_RDONLY);if(…

js 键盘监听 组合键

今天分享如何快速实现js快捷键监听 所需环境&#xff1a; 浏览器js 实现目标 mac/win兼容&#xff0c;一套代码&#xff0c;多个平台支持快捷键监听/单按键监听事件是否冒泡可设置使用方式简单快速挂载与卸载4行代码实现组合键监听 代码原理 把键盘监听事件挂载在documen…

c#-DataGridView控件实现分页

有时候我们需要进行分页显示&#xff0c;第一方面是在大数据量下可以降低卡顿&#xff0c;另一方面也是方便查找。 首先划重点&#xff0c;如果卡顿&#xff0c;不要用单元格填充的方式去刷新&#xff0c;用绑定数据源的方式比较高效&#xff01; 下面重点讲如何使用数据源绑定…

正式收官!阿里云携手优酷,用AI重塑影视IP创新边界

影视行业的新一轮创作风潮&#xff0c;将由AI掀起。 GPT和Sora等先进AI模型的出现&#xff0c;带动影视行业进入一场前所未有的创意变革。当前&#xff0c;在角色创作、脚本生成、营销策略等方面&#xff0c;AI已经展现了强大的潜力。而作为影视创作的“灵魂”&#xff0c;影视…

重新审视 ChatGPT 和 Elasticsearch:RAG 真正将应用程序紧密结合在一起

作者&#xff1a;来自 Elastic Jeff Vestal 关注博客 ChatGPT 和 Elasticsearch&#xff1a;OpenAI 遇到私人数据。 在此博客中&#xff0c;你将了解如何&#xff1a; 创建 Elasticsearch Serverless 项目创建推理端点以使用 ELSER 生成嵌入使用语义文本字段进行自动分块并调…

SpringBoot如何进行全局异常处理?

1.为什么需要全局异常处理&#xff1f; 在日常开发中&#xff0c;为了不抛出异常堆栈信息给前端页面&#xff0c;每次编写Controller层代码都要尽可能的catch住所有service层、dao层等异常&#xff0c;代码耦合性较高&#xff0c;且不美观&#xff0c;不利于后期维护。 应用场…

基于java的少儿编程网上报名系统+vue

TOC ssm006基于java的少儿编程网上报名系统vue 研究背景 近年来&#xff0c;随着网络技术的不断发展&#xff0c;越来越多人在网站查询各种信息&#xff0c;少儿编程网上报名系统对用户和管理员都有很大帮助&#xff0c;少儿编程网上报名系统通过和数据库管理系软件协作来实…

基于STM32开发的智能安防报警系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化传感器数据采集与处理报警控制与通知Wi-Fi通信与远程监控应用场景 家庭安防管理商铺和办公室的智能安防常见问题及解决方案 常见问题解决方案结论 1. 引言 随着智能家居和物联网技…

拟合的置信区间

目标图: 图片来源:Fig. 4e from Arwani, Ruth Theresia, et al. "Stretchable ionic–electronic bilayer hydrogel electronics enable in situ detection of solid-state epidermal biomarkers." Nature Materials (2024): 1-8. 1. 数据输入 假设原始数据如下:…

书生大模型实战营第三期基础岛第二课——8G 显存玩转书生大模型 Demo

8G 显存玩转书生大模型 Demo 基础任务进阶作业一&#xff1a;进阶作业二&#xff1a; 基础任务 使用 Cli Demo 完成 InternLM2-Chat-1.8B 模型的部署&#xff0c;并生成 300 字小故事&#xff0c;记录复现过程并截图。 创建conda环境 # 创建环境 conda create -n demo pytho…

协作新选择:即时白板在线白板软件分享

在团队合作中&#xff0c;产品经理扮演着至关重要的角色&#xff0c;他们不仅是产品与用户之间的纽带&#xff0c;更是产品性能和用户需求的桥梁。他们需要深入参与产品的研发过程&#xff0c;并与研发团队保持紧密的沟通。因此&#xff0c;产品经理需要一款高效的协作工具来提…

纯电SUV挑花眼了?看看这两款十多万的家用SUV谁更香

文/王俣祺 导语&#xff1a;随着新能源技术的日益成熟&#xff0c;现如今纯电汽车已经在市场上卖得风生水起。早些时候人们可能还会对纯电汽车抱有“续航焦虑”&#xff0c;但随着各个车型在电池容量以及能耗方面都迎来了进步&#xff0c;充电网络也日渐完善&#xff0c;选择一…

多商户多套部署需修改注意事项

同一台服务器上部署多个多商户项目&#xff0c;需要修改和调整的地方等。 一、修改代码中的端口号&#xff0c;需要两个项目不能使用同一个端口号&#xff0c;例如&#xff1a;A项目用&#xff1a;8324&#xff0c;B项目用&#xff1a;8325&#xff1b; 二、修改反向代理&…

认识泛型VS包装类

1.包装类 在 Java 中&#xff0c;由于基本类型不是继承自 Object &#xff0c;为了在泛型代码中可以支持基本类型&#xff0c; Java 给每个基本类型都对应了 一个包装类型。 ps:为什么需要包装类&#xff1f;说白了java就是面向对象编程的 比如&#xff1a;Java 的集合框架&am…

笔记整理—uboot启动过程(3)栈的二次设置以及常用名词解析,BL1部分完

前文说到了uboot的lowlevel_init都干了些什么&#xff0c;也就是经过了这项初期的低级启动&#xff0c;使得我们能在串口监视器上看见机器打印出的第一句话“OK”。当lowlevel_init结束后&#xff0c;uboot去做了另一件事情&#xff0c;那就是栈的再次设置。 第一次栈设置发生在…

昂科烧录器支持Analogix硅谷数模的USB-C端口控制器ANX7406

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中Analogix硅谷数模的USB-C端口控制器ANX7406已经被昂科的通用烧录平台AP8000所支持。 ANX7406是一款USB Type-C™&#xff08;USB-C&#xff09;端口控制器&#xff0c;符合最新…