认识Spring(1)

在这里插入图片描述

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(newClassPathResource("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.mzph.cn/news/3431.shtml

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

相关文章

【机器人模拟-02】 模拟移动机器人设置里程计

一、说明 在本教程中,我将向您展示如何设置移动机器人的测程。本教程是“机器人模拟”指南中的第二个教程。测量位移是仿真中的重要内容,设置测程的官方教程在此页面上,但我将逐步引导您完成整个过程。 您可以在此处获取此项目的完整代码。让我们开始吧! 二、ROS 2 中的里程…

密码学学习笔记(十五):ECDSA - 椭圆曲线数字签名算法

椭圆曲线数字签名算法是DSA的一种椭圆曲线变体&#xff0c;它发明的初衷只是避免使用Schnorr签名的专利。椭圆曲线数字签名算法依赖于验证器中的私钥和主机用于验证验证器的公钥。它的缺点和DSA一样&#xff0c;它也没有提供安全性证明。 椭圆曲线算法 DSS&#xff08;数字签…

torch分布式通信基础

torch分布式通信基础 1. 点到点通信2. 集群通信 官网文档&#xff1a;WRITING DISTRIBUTED APPLICATIONS WITH PYTORCH 1. 点到点通信 # 同步&#xff0c;peer-2-peer数据传递 import os import torch import torch.distributed as dist import torch.multiprocessing as mpdef…

php 开发微信 h5 支付 APIv3 接入超详细流程

✨ 目录 &#x1f388; 申请商户号&#x1f388; 申请商户证书&#x1f388; 设置V3密钥&#x1f388; 开通H5支付&#x1f388; 设置支付域名&#x1f388; SDK 下载&#x1f388; 第一次下载平台证书&#x1f388;非第一次下载平台证书&#x1f388; H5下单 &#x1f388; 申…

【前端知识】React 基础巩固(二十八)——StrictMode

React 基础巩固(二十八)——StrictMode StrictMode StrictMode 是一个用来突出显示应用程序中潜在问题的工具 与 Fragment 一样&#xff0c;StrictMode 不会渲染任何可见的 UI为后代出发额外的检测和警告严格模式检查仅在开发模式下运行&#xff0c;不影响生产构建 严格模式检…

【DBA课程-笔记】第 3 章:MongoDB数据库核心知识

内容 一、MongoDB 数据库架构 A. MongoDB数据库体系架构 1. 存储引擎&#xff08;MongoDB Storage Engines&#xff09;&#xff1a; 2. MongoDB 数据逻辑架构 二、MongoDB 存储引擎 A. 查看mongodb服务器的状态 B. 查看引擎信息&#xff08;4.2.1 没有这个命令&#xf…

搭载下一代人工智能技术,微软推出Power Automate流程挖掘产品

在近日的Microsoft Inspire大会中&#xff0c;微软揭晓了他们即将推出的Power Automate流程挖掘产品&#xff0c;并计划在8月1日正式对外开放。 试用地址&#xff1a;https://powerautomate.microsoft.com/zh-cn/#home-signup 这款产品搭载了下一代人工智能技术&#xff0c;有…

基于 Fedora 38 的预期版本 Nobara 38 发布

导读基于 Fedora 38 的预期版本 Nobara 38 终于发布了&#xff0c;它带来了一系列用户友好的修复和功能增强。Nobara 是 Fedora Linux 的修改版本&#xff0c;旨在解决用户面临的常见问题&#xff0c;并提供开箱即用的顺滑的游戏、流媒体和内容创建体验。凭借一系列附加软件包和…

深度学习ai学习方向如何规划,算法竞赛,机器学习,搭建环境等答疑

目录 1了解人工智能的背景知识 2 补充数学或编程知识 3 熟悉机器学习工具库 4 系统的学习人工智能 5 动手去做一些AI应用 1了解人工智能的背景知识 一些虽然存在但是在研究或者工业上不常用的知识&#xff0c;为自己腾出更多的时间来去学习&#xff0c;研究。 人工智能里…

天翎MyApps低代码平台唯品会金牌客服管理系统

项目痛点&#xff1a; 作为一家知名的创新大型电商&#xff0c;唯品会秉承“传承品质生活&#xff0c;提升幸福体验”的企业使命。基于客服铁军锻造项目&#xff0c;实现基于金牌案例的提交、评审、积分&#xff0c;学习功能。 项目中的晋升机制、案例产生学习机制、双激励机制…

linux 基于debian_ubuntu AB系统适配(三)- overlayroot

Overlayroot Overlayroot是一个实用工具,允许您创建一个只读的根文件系统和一个可写的覆盖文件系统。这对于创建一个更安全和稳定的系统很有用,因为对系统所做的任何更改都将存储在覆盖文件系统中,可以很容易地丢弃或重置。 在Debian下,分离的系统在/userdata/rootfs_ove…

手把手教你搭建SpringCloud项目(九)集成OpenFeign服务接口调用

什么是微服务&#xff1f;一看就会系列&#xff01; 一、手把手教你搭建SpringCloud项目&#xff08;一&#xff09;图文详解&#xff0c;傻瓜式操作 二、手把手教你搭建SpringCloud项目&#xff08;二&#xff09;生产者与消费者 三、手把手教你搭建SpringCloud项目&#x…

【iOS】ARC实现

ARC由以下工具来实现&#xff1a; clang&#xff08;LLVM编译器&#xff09;3.0以上objc4 Objective-C运行时库493.9以上 下面我们&#xff0c;我们将围绕clang汇编输出和objc4库的源代码探究ARC实现 1. __strong修饰符 1.1 赋值给附有__strong修饰符的变量 看下面代码 {…

注释气泡图函数(更新)

之前我们写过一个原创可视化函数Dotplot_anno.R&#xff0c;nature级别图表&#xff1a;一个注释气泡热图函数&#xff08;适用于单细胞及普通数据&#xff09;。主要解决的问题是1) 单细胞基因可视化分组注释。2) Bulk RNA差异基因热图、气泡图。3) 富集分析结果气泡图展示。这…

【分布式训练】基于Pytorch的分布式数据并行训练

基于Pytorch的分布式数据并行训练 动机为什么要并行分布数据&#xff1f;现有资料的不足 Outline整体框架图带解释的最小demo示例没有multiprocessing开启multiprocessing 分布式训练启动方式混合精度训练&#xff08;采用apex&#xff09; 参考资料 简介&#xff1a; 在PyTorc…

【ROS】ROS1人机界面开发:第一个最简ROS+QtGui程序(按钮启动发布者)

【ROS】郭老二博文之:ROS目录 1、创建工程 1)新建工程:Other Project --> ROS Workspace 2)设置工程名称、路径 3)可以通过点击“Browse”来创建目录 注意:使用自带ros插件的qtcreator-ros,无法创建目录、也不能选择目录,这是个bug,因此需要在终端手动创建目录…

密码学学习笔记(十六 ):Schnorr签名算法

交互式零知识证明 零知识证明(ZKP)就是不会将证据泄露给验证者的知识证明。Schnorr身份认证识别协议是一个交互式ZKP&#xff0c;它满足了完备性、可靠性、零知识性。所谓的交互式ZKP方案通常包含3个步骤&#xff08;承诺、挑战和证明&#xff09;&#xff0c;在文献中通常被称…

django框架向DRF框架演变过程详解

一、Django框架实现项目查询接口 主要知识点&#xff1a; Django框架视图函数 1、在 Django 项目中创建一个应用&#xff08;如果还没有创建&#xff09;&#xff1a; python manage.py startapp projects 2、在项目的 models.py 文件中定义项目模型 from django.db impor…

【C++】-stack和queue的具体使用以及模拟实现(dqeue的介绍+容器适配器的介绍)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

Java八股文总结(二)

Java八股文总结&#xff08;续&#xff09; 接上篇笔记&#xff1a;Jhttps://blog.csdn.net/weixin_44780078/article/details/130192373 文章目录 Java八股文总结&#xff08;续&#xff09;六、MySql 相关1. InnoDB 与 MyISAM 的区别&#xff1f;2. 为什么 InnoDB 存储引擎表…