认识Spring(1)

news2024/12/23 17:40:36

在这里插入图片描述

hi,大家好,今天继续为大家带来Spring的相关内容

文章目录

  • 🧁1.理解Spring和IOC
  • 🧁2.DI和DF
    • 🍸2.1什么是DI
    • 🍸2.2什么是DF
    • 🍸2.3DI和DF的区别
  • 🧁3 Spring创建和使用
    • 🍸3.1创建Spring项目
      • 🍡3.1.1创建一个maven项目
      • 🍡3.1.2添加Spring框架支持
      • 🍡3.1.3添加启动类
  • 🧁4.创建Bean对象
    • 🍸4.1创建Bean
    • 🍸4.2将Bean注册到容器
  • 🧁5.获取Bean并使用Bean对象
    • 🍸5.1创建Spring上下文
    • 🍸5.2获取指定的Bean对象
    • 🍸5.3使用Bean
  • 🧁6.总结

🧁1.理解Spring和IOC

上一期的学习我们知道了什么是Spring,是包含了众多工具方法的IOC容器,作为一个容器,要具备的容器的功能是:

1.将对象存储到容器(Spring)中
2.把对象从容器中取出来

Spring最核心的功能就是将对象存入到Spring中,再从Spring中获取对象的过程
Bean定义:
在Spring中,我们把对象叫做Bean,Bean就是Java中的普通对象 Spring(ioc容器)管理的资源就是对象,对象就是Bean

将对象存放到容器中的好处:将对象存储在 IoC 容器相当于将随用随取,用完放入仓库里面,效率很高.⽽ new 对象的⽅式相当于,每次需要⼯具了,才现做,⽤完就扔掉了也不会保存,下次再⽤的时候还得重新做,效率很低.

Spring 是⼀个 IoC 容器,对象的创建和销毁的权利都交给 Spring 来管理,本身⼜具备了存储对象和获取对象的能⼒.

🧁2.DI和DF

🍸2.1什么是DI

DI ,全称Dependency Injection.意思是依赖注入

官方解释:是一种将依赖关系从一个对象传递到另一个对象的技术。在依赖注入中,对象不再负责创建或查找它所依赖的对象,而是将依赖关系委托给 IoC容器。容器在创建对象时,自动将依赖的对象注入到它所依赖的对象中。

实现方式:在Spring中,依赖注入通过注解或 XML 配置文件来实现

简单解释:依赖注入是指在程序运行期间,动态的将依赖对象获取到的过程,也可以说IoC 容器在运⾏期间,动态地将某种依赖关系注⼊到对象之中.
举个例子:A a=new B().创建a 对象需要依赖B ,那么new的这个过程,就直接去容器里面取

那么和之前学的IOC有什么区别和联系?

联系:二者从不同角度描述同一件事情:实现对象之间的解耦,不用再new对象,直接去容器里面取.
区别:
IOC是一种设计思想,而DI是具体的实现方式
不止DI,DF也是一种实现方式

🍸2.2什么是DF

DF Dependency Found 依赖查找

官方解释:是一种从 IoC容器中查找依赖对象的技术。在依赖查找中,对象负责查找它所依赖的对象,而不是将依赖关系委托给容器。容器只负责管理对象的生命周期,而不负责对象之间的依赖关系。

简单解释:给这个对象起一个名字,根据这个名字在容器里查找,找到之后,将该变量赋值给一个新定义的对象,Spring对象的创建就用到了依赖查找,等一下说
实现方式:依赖查找通过 ApplicationContext 接口的 getBean() 方法来实现

🍸2.3DI和DF的区别

依赖注入是将依赖关系委托给容器,由容器来管理对象之间的依赖关系而依赖查找是由对象自己来查找它所依赖的对象,容器只负责管理对象的生命周期

🧁3 Spring创建和使用

🍸3.1创建Spring项目

🍡3.1.1创建一个maven项目

在这里插入图片描述

🍡3.1.2添加Spring框架支持

在这里插入图片描述

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
</dependencies>

🍡3.1.3添加启动类

在这里插入图片描述
在这里插入图片描述

🧁4.创建Bean对象

🍸4.1创建Bean

bean就是一个普通对象
在这里插入图片描述

🍸4.2将Bean注册到容器

蓝色的Java放的是Java源代码,resources放的是配置文件,绿色的放的是测试代码
在创建好的项⽬中添加 Spring 配置⽂件 spring-config.xml,将此⽂件放到 resources 的根⽬录下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <content:component-scan base-package="com.bit.service"></content:component-scan>
</beans>

在这里插入图片描述

再将 Student 对象注册到 Spring 中就可以,具体操作是在 中添加如下配置

<bean id="student" class="com.spring.demo.Student"></bean>

id对应的是将对象存储到IOC容器的名字,class对应的是存储到IOC容器的对象的完整路径(包名+类名)

🧁5.获取Bean并使用Bean对象

🍸5.1创建Spring上下文

1.Spring 上下⽂对象可使⽤ ApplicationContext

//得到bean对象
        ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");

在这里插入图片描述
还可以使⽤ BeanFactory 来创建 Spring 的上下⽂

BeanFactory beanFactory=new XmlBeanFactory(new
                ClassPathResource("spring-config.xml"));

在这里插入图片描述
ApplicationContext 和BeanFactory有什么区别?
相同点:都是容器管理对象,都可以获取bean对象
区别:
1.ApplicationContext属于BeanFactory的子类,ApplicationContext拥有更多功能(国际化⽀持、资源访问⽀持、以及事件传播等⽅⾯的⽀持)
2.加载bean机制不同:BeanFactory是懒加载
按需加载,

在这里插入图片描述
Application是一次性全部加载完
在这里插入图片描述

🍸5.2获取指定的Bean对象

🐷1.根据名称获取bean
在这里插入图片描述
🐷2.根据类型获取bean对象

 Student studentSrvice=context.getBean(Student.class);

在这里插入图片描述

问题:当同一个类型注入到Spring多个的情况下,那么这个就会报错,编译器不知道获取的对象是哪一个
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
🐷3.根据名称+类型来获取

 Student studentSrvice=beanFactory.getBean("student1",Student.class);

在这里插入图片描述

🍸5.3使用Bean

//使用bean对象
        studentSrvice.sayHi();

在这里插入图片描述

🧁6.总结

Spring项目的创建和使用的大致流程

🍬 1.创建Spring项目
🍬2.存Bean
🍭I.创建Bean(创建一个普通对象)
🍭 II.将bean放入Spring(在reources创建spring-config.xml,放相关代码)
🍬3.取bean
🍭3.1.获得Spring 上下文(ApplicationContext/BeanFactory来获得)
🍭3.2.获取bean对象(getbean()方法)
🍭3.3使用bean

今天的讲解就到这里了,我们下期再见咯~
在这里插入图片描述

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

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

相关文章

如何调整Vivado菜单栏字体大小

Vivado整体字体缩放开关 点击齿轮图标Settings 点击齿轮图标Settings Tool Settings下找到Display选项&#xff1a;找到Scaling选项选择User defined即可调整缩放倍率&#xff08;100/125/150/175%…&#xff09;。 点击Apply重启后生效

字符函数和字符串函数上篇(详解)

❤️ 作者简介 &#xff1a;RO-BERRY 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识&#xff0c;对纯音乐有独特的喜爱 &#x1f4d7; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;如果你也感兴趣的话欢迎关注博主&#xff0c;期待更新 字符函数和字符串函数 &a…

css之flex两端对齐,且元素自动换行、flex、flow

文章目录 效果图htmlstyleflex-flow 效果图 html <div class"parent_element"><div class"item">7</div><div class"item">7</div><div class"item">7</div><div class"item"…

红队打靶:KIOPTRIX1.2打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现和端口扫描 第二步&#xff1a;Web渗透与CMS漏洞利用 第三步&#xff1a;敏感信息搜索 第四步&#xff1a;SSH登录与提权 总结与思考 写在开头 本篇博客根据大佬红队笔记的视频进行打靶&#xff0c;详述了打靶的每一步思路&a…

ACL 2023 | 通过语音离散表示统一语音翻译和机器翻译

前言 在当今全球化和多元文化的时代&#xff0c;语音翻译技术正成为我们跨越语言障碍的得力助手&#xff01;语音翻译&#xff08;Speech Translation, ST&#xff09;旨在将源语言语音翻译成目标语言文本&#xff0c;广泛应用于会议演讲翻译、视频字幕翻译、AR增强翻译等各种…

【启发式算法】灰狼优化算法【附python实现代码】

写在前面&#xff1a; 首先感谢兄弟们的订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…

快速批量改名文件!随机字母命名,让文件名更有创意!

想要让文件名更加有创意和个性化吗&#xff1f;不妨尝试使用随机字母来批量改名文件&#xff01;无论是照片、文档还是其他文件&#xff0c;只需要简单的几个步骤&#xff0c;您就可以为它们赋予一个独特的随机字母命名。这不仅可以帮助您整理文件&#xff0c;还能增加一些乐趣…

AtCoder Beginner Contest 310-D - Peaceful Teams(DFS)

Problem Statement There are N sports players. Among them, there are M incompatible pairs. The i-th incompatible pair (1≤i≤M) is the Ai​-th and Bi​-th players. You will divide the players into T teams. Every player must belong to exactly one team, an…

SpringBoot整合SpringCloudStream3.1+版本的Kafka死信队列

SpringBoot整合SpringCloudStream3.1版本的Kafka死信队列 上一篇直通车 SpringBoot整合SpringCloudStream3.1版本Kafka 实现死信队列步骤 添加死信队列配置文件&#xff0c;添加对应channel通道绑定配置对应的channel位置添加重试配置 结果 配置文件 Kafka基本配置&#…

Python机器学习、数据统计分析在医疗中的应用

Python机器学习在医疗诊断领域的应用 随着人工智能技术的不断发展&#xff0c;机器学习已经在医疗领域的诊断治疗、预防等方面展现出强大的潜力。Python 作为一种广泛应用于机器学习的语言&#xff0c;在医疗领域也已经被广泛使用。本文将探讨 Python 机器学习在医疗领域的应用…

mysql 第五章

目录 1.order by 排序 2.区间判断 3.group by 分组 4.limit 5.别名 6.通配符 like 7.总结 1.order by 排序 2.区间判断 3.group by 分组 4.limit 5.别名 6.通配符 like 7.总结 对 mysql 数据库的查询&#xff0c;除了基本的查询外&#xff0c;有时候需要对查…

nginx官网与下载

官网 nginx: download 下载 解压 conf配置文件

[高通平台][WLAN] IEEE802.11mc 介绍

IEEE802.11mcWi-Fi协议(即Wi-FiRound-Trip-Time,RTT),利用此项技术及可以进行室内定位,因此为了使用此项技术,只有在硬件支持的设备上,应用才可以使用最新的RTT API以测量附近具有RTT功能的Wi-FiAP。 单面RTT :  距离是通过发送的分组和接收到的ACK之间的时间差来计算的…

SPSS中级统计--S05-5多个样本率的卡方检验及两两比较

小伙伴们&#xff0c;今天我们学习SPSS中级统计--多个样本率的卡方检验及两两比较。 例1、2 C列联表资料 上期我们学习了双向无序RC表资料&#xff08;c2&#xff09;的检验&#xff0c;案例如下&#xff0c;比较不同污染地区的动物畸形率是否有差异&#xff1f; H0&#xff…

哈医大一院电力监控系统 安科瑞 许敏

摘要&#xff1a;本文介绍基于Acrel-3000电力监控软件和电力监控仪表&#xff0c;设计并实现了一套分散式采集和集中控制管理的自动化报警系统。系统实现远程精细化及时性报警&#xff0c;避免因停电造成医疗事故&#xff0c;提高了供电质量和管理水平&#xff0c;具有简明实用…

怎么把高版本CAD转换成低版本?CAD版本转换方法分享

某些情况下&#xff0c;较新的CAD软件版本可能不被较旧的CAD软件版本所支持。如果你需要与使用较旧版本CAD的人进行交流、共享或协作&#xff0c;将高版本CAD转换为低版本可以确保文件能够顺利打开和编辑。那么问题来了&#xff0c;怎么将高版本CAD转换成低版本呢&#xff1f;教…

29,stack容器

29.1stack基本概念 概念&#xff1a;stack是一种先进后出(First In Last Out,FILO)的数据结构&#xff0c;它只有一个出口 栈容器 符合先进后出 栈中只有顶端的元素才可以被外界使用&#xff0c;因此栈不允许有遍历行为 栈可以判断容器为空与否(empty) 栈可以返回元素个数(…

【SQL】计算每个人的完成率

目录 前提任务的完成率前三名拓展&#xff1a;达梦如何去实现除法有余数拓展&#xff1a;MySQL 任务的完成率前三名 前提 达梦数据库&#xff1a; select 1/3; # 0不要求四舍五入 任务的完成率前三名 # nick_name 人名 # finishNum 当前这个人的任务完成数 # total 当前这…

Go语言之并发编程练习,GO协程初识,互斥锁,管道:channel的读写操作,生产者消费者

GO协程初识 package mainimport ("fmt""sync""time" )func read() {defer wg.Done()fmt.Println("read start")time.Sleep(time.Second * 3)fmt.Println("read end") }func listenMusci() {defer wg.Done()fmt.Println(&qu…

【lesson2】Linux基本指令1

文章目录 touch创建文件更新文件最新修改时间 lslsls -lls -als -i pwd...cdcd 路径法一&#xff1a;cd 绝对路径法二&#xff1a;cd 相对路径 cd - stattreemkdirmkdir创建一个目录mkdir -p创建一串路径目录 ~/rmdirrmrmrm -frm -rrm -i mancpcpcp -r mvnaocatcatcat -n ta…