【SSM框架】spring的创建与使用

news2025/2/23 14:07:36

spring的创建与使用

  • Spring项目的创建
    • 创建一个maven项目
    • 添加Spring依赖
    • 添加启动类
  • 将bean存储到Spring 中
    • 创建bean对象
    • 将bean对象存储到Spring容器中
  • 从Spring中获取bean
    • 创建Spring(上下文)对象
    • 从Spring中获取到bean对象
    • 使用Bean(非必须)
  • 从spring中获取Bean的3种方式
    • Ⅰ通过Bean名称获取
    • Ⅱ 通过类型的方式获取
    • Ⅲ 通过名称 + 类型的方式获取(推荐)
    • 一个类型存储多个实例,这多个实例是同一个吗?
  • ApplicationContext VS BeanFactory

Spring 就是一个包含众多工具方法IoC容器。那么是容器它就拥有两个最基本的功能:将对象(Bean)存储到容器(Spring)中。从容器中将对象取出来。
综上我们在本博客spring的创建与使用的目标:

  • Spring的项目创建
  • 将bean存储到Spring 中
  • 从Spring中获取bean(DI- -依赖注入)

Spring项目的创建

我们此处创建的是Spring Core 项目 不是 Spring Web项目,我们和普通的Java程序是一样都是用main方法启动,并不是像Servelt那样用Tomcat来启动。

创建一个maven项目

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

添加Spring依赖

添加Spring依赖我们可以从https://mvnrepository.com/中去查找相关的依赖。

下面是查找依赖的步骤

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

在这里插入图片描述
我们通常用的jdk是1.8版本的,如果选择6.x 版本的他支持JDK 17+的,我用的是jdk8,就必须使用5.x的。
在这里插入图片描述
将复制下来的依赖文本复制到pom.xml中的< dependencies >标签内
在这里插入图片描述
点击刷新按钮,让依赖注入到spring中
在这里插入图片描述

在这里插入图片描述

添加启动类

在这里插入图片描述
在这里插入图片描述
综上,我们就创建成功了一个Spring 项目,接下来我们就对Spring项目进行,对象(Bean)存储到容器(Spring)中,从容器中将对象取出来。

将bean存储到Spring 中

bean: 在Java中一个对象被多次使用,就可以被称之为bean。
此次操作是将bean对象存储到Spring容器中,我们其实就需要两步操作就可以完成,就是创建bean对象,然后将bean对象存储到Spring容器中

创建bean对象

在这里插入图片描述

将bean对象存储到Spring容器中

在resources底下创建spring-config.xml
在这里插入图片描述
在xml中填写配置文件,注意配置文件不用背,没几个人能记得住,我们只需要吧配置文件放到一个我们能找到的地方,我们需要的时候直接复制过来就行

<?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">
	
</beans>

在这里插入图片描述
这一步我们就把bean对象存储到了Spring容器中,对象的名称是student,接下来我们就要开始从Spring容器中获取bean对象了。

从Spring中获取bean

我们从Spring容器中获取bean对象,我们在启动类中实现此操作的。

创建Spring(上下文)对象

在这里插入图片描述

从Spring中获取到bean对象

在这里插入图片描述

使用Bean(非必须)

在这里插入图片描述
综上我们就把Spring的创建和使用就解释清楚了,但是本博客还没有结束,还需要解释一下得到Spring上下文的的方法ApplicationContext,有几种获取Bean的方式,以及还有其他的能够获取上下文的方法BeanFactory。

从spring中获取Bean的3种方式

我们先做个准备工作创建一个Student类型的bean对象在这里插入图片描述

将bean对象存储到Spring容器中
在这里插入图片描述

Ⅰ通过Bean名称获取

我在解释spring创建与使用的时候用的就是设个方式,我们下面就用Student类进行获取
在这里插入图片描述
输出结果:
在这里插入图片描述
我们此种方式不够优雅,因为返回类型是Object你要强制类型转化,你如果没有找到该名称对应的对象你还强转干什么?本来人家就找不到,你还准备把他强转,这不是伤口上撒盐吗。

Ⅱ 通过类型的方式获取

在这里插入图片描述
通过此种方式会很方便的获取Bean对象,但是如果添加两个相同类型的Bean对象呢?
在这里插入图片描述
在Spring容器中添加两个相同的类对象我们就会报错如下图所示
在这里插入图片描述
所以通过类型的方式获取也是有劣势的,在有相同的类型的Bean对象就不能够获得,那么要解决这种问题,我么就引入了下面的获取方式

Ⅲ 通过名称 + 类型的方式获取(推荐)

在这里插入图片描述
我们通过名称+类型的方式就获取了Bean对象,但是有的人就会发出疑问,这个和通过名称的方式有什么区别吗?不都是名称和类型结合吗。
其实他们两个是不相同的,第一种方式是通过名称查找,查找完成之后就强制类型转化。但是第三种方式是通过名称 + 类型 联合查询的,查询到了直接返回该类型不用通过强制类型转化,更加的优雅。

一个类型存储多个实例,这多个实例是同一个吗?

我们会有这样的一个疑问,我们存储多个实例,是只创建一个对象,还是存储一次多一个对象呢?
这个问题我们用代码就可以验证成功了
在这里插入图片描述
输出结果很明显的表明了并不是存储多个实例只创建一个对象。

我们讲解了用ApplicationContext接口获得上下文之后的三种方式获取了Bean。其实不是只有一种方式能获取Spring上下文对象还可以用BeanFactory来获取Spring的上下文。下面我们就来讲解ApplicationContext和BeanFactory的区别

ApplicationContext VS BeanFactory

这两个方法的相同点是都是一个接口,都能够获取上下文,并且通过子类创建的对象都有三种方式获取bean对象。
对于他们两个的区别我们可以用代码说话
先做准备工作:
在这里插入图片描述
写出分别用两个接口获取上下文,然后获取bean对象的过程。
在这里插入图片描述

运行结果:
在这里插入图片描述
通过运行结果可知,ApplicationContext获取Spring上下文的时候,一次性加载并初始化了所有的bean对象。
BeanFactory 是一个lazy load过程,只有调用getBean的时候,对应的bean对象才加载。
通过上述区别可以看出,

  • ApplicationContext是一个比较费内存的,但是在获取bean的时候是不需要加载直接获取速度非常快。
  • BeanFactory则是需要哪个就要加载哪个,更节省空间,是更加轻量的,但是在获取bean对象的时候得需要加载,比较耗费时间。

在当前内存的价格越来越便宜,内存的空间越来越大的时候,ApplicationContext这个以空间换取时间的方式来提升项目的性能。BeanFactory则是用的越来越少了,创建的时候,该接口的子类已经划上横杠了,很有可能在不久的将来该接口就会被新的版本删除掉。
在这里插入图片描述
通过查看继承关系我们会惊奇的发现ApplicationContext继承了BeanFactory接口的。ApplicationContext 有BeanFactory提供的基础访问容器的功能外还会提供其他的功能,不然的话只有父接口的功能这样的继承是毫无意义的.新功能比如了对国际化⽀持、资源访问⽀持、以及事件传播等⽅⾯的⽀持。这些功能在以后的SSM章节中会一一介绍。

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

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

相关文章

奇瑞版Model 3与Model Y登场:正式进军高端纯电

作者 | Amy 编辑 | 德新4月7日&#xff0c;奇瑞在北京举办「新能源之夜」。整场发布会都在传递一个讯息&#xff1a;奇瑞搞新能源&#xff0c;要大搞特搞&#xff01; 奇瑞在这场发布会上&#xff0c;对新能源的战略、技术、品牌和产品作了全面梳理。其中最引人注目的是&#x…

环信web、uniapp、微信小程序sdk报错详解---注册篇(二、三)

项目场景&#xff1a; 记录对接环信sdk时遇到的一系列问题&#xff0c;总结一下避免大家再次踩坑。这里主要针对于web、uniapp、微信小程序在对接环信sdk时遇到的问题。 注册篇(二) 注册用户报错400 原因分析&#xff1a; 从console控制台输出及network请求返回入手分析 可以看…

【三十天精通Vue 3】第十一天 Vue 3 过渡和动画详解

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录引言一、Vue 3 过度和动画概述1.1过度和动画的简介二、Vue 3 过度2…

Java 集合框架面试问题集锦

Java集合框架&#xff08;例如基本的数据结构&#xff09;里包含了最常见的Java常见面试问题。很好地理解集合框架&#xff0c;可以帮助你理解和利用Java的一些高级特性。下面是面试Java核心技术的一些很实用的问题。 Q&#xff1a;最常见的数据结构有哪些&#xff0c;在哪些场…

telnet远程管理linux主机及Zlib、openssl、openssh升级

目录 一、telnet远程管理主机 1、检查是否安装telnet 2、安装telnet服务 3、测试telnet登录 二、zlib、openssl、openssh升级 1、下载zlib包 2、下载openssl包 3、下载openssh包 4、 编译安装zlib 5、编译安装openssl 6、准备升级openssh环境 ①注意必须使用telne…

LLM 快人一步的秘籍 —— Zilliz Cloud,热门功能详解来啦!

最近&#xff0c;我们发布了可处理十亿级向量数据的 Zilliz Cloud GA 版本&#xff0c;为用户提供开箱即用的向量数据库服务&#xff0c;大大降低了数据库的运维成本。 看过上一篇文章《可处理十亿级向量数据&#xff01;Zilliz Cloud GA 版本正式发布》的朋友们知道&#xff0…

【SSM】Spring6(十.面向切面编程AOP)

文章目录1.AOP2. AOP的七大术语3. 切点表达式4.使用Spring的AOP4.1 环境准备4.2 基于AspectJ的AOP注解式开发步骤4.3 所有通知类型4.4 切面顺序4.5 通用切点4.6 获取目标方法的方法签名4.7 全注解式开发4.8 基于XML配置的AOP5. 案例&#xff1a;事务处理1.AOP 将与核心业务无关…

Visual Studio Code跳转到CSS定义

Visual Studio Code 快速跳转到 VUE文件 或 CSS文件的定义位置&#xff08;跳转到class定义&#xff0c;跳转到css定义&#xff09;&#xff0c;插件Css Peek、Vue Peek 对提升开发效率上&#xff0c;事半功倍。 目录 1、跳转到CSS定义 1.1、CSS Peek 1.2、Vue Peek 2、其他…

舌体胖瘦的自动分析-曲线拟合-或许是最简单判断舌形的方案(六)

返回至系列文章导航博客 1 简介 在中医智能舌诊项目中需要舌体胖瘦的自动分析 舌体胖瘦是中医诊断中重要的观察依据&#xff0c;。胖大舌“舌色淡白&#xff0c;舌体胖嫩&#xff0c;比正常舌大而厚&#xff0c;甚至充满口腔”&#xff0c;主脾肾阳虚&#xff0c;气化失常&am…

C++无符号整型与有符号整型变量的运算-不简单

示例分析&#xff1a; #include<iostream> #include <stdio.h>struct Result {char c;char d;unsigned char e; };Result getChar(int x, int y) {Result res;unsigned int a x;(a y > 10) ? (res.c 1) : (res.c 2);res.d a y;res.e a y;return res; …

RHCE第一次作业at和cront两个任务管理程序的区别

1.at 单一执行的例行性工作&#xff1a;仅处理执行一次就结束了 -m 当任务完成之后&#xff0c;即使没有标准输出&#xff0c;将给用户发送邮件 -l atq的别名&#xff0c;可列出目前系统上面的所有该用户的at调度 -d atrm的别名,可以取消一个在at调度中的工作 -v 使用较明显的…

基于html+css的图片展示11

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

信息安全保障人员CISAW认证基础级、专业级通用认证条件

信息安全保障人员认证&#xff08;Certified Information Security Assurance Worker&#xff0c;简称“CISAW”&#xff09;是中国网络安全审查技术与认证中心针对信息安全保障领域不同专业技术方向、应用方向和保障岗位&#xff0c;依据国际标准ISO/IEC 17024《人员认证机构通…

HTTPS-TSL握手

HTTP一般基于TCP协议&#xff0c;而HTTPS就是在这之间加了SSL/TLS协议&#xff0c;那么在TCP三次握手建立TCP连接后&#xff0c;就需要TLS握手建立SSL/TLS连接。 TLS握手-流程 &#xff08;基于RSA算法&#xff09; &#xff08;1&#xff09;首先&#xff0c;客户端向服务器发…

Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】

Unity学习参考文档和开发工具 ☺ unity的官网文档&#xff1a;https://docs.unity3d.com/cn/current/Manual/ScriptingSection.html ■ 学习方式&#xff1a; 首先了解unity相关概述&#xff0c;快速认识unity编辑器&#xff0c;然后抓住重点的学&#xff1a;游戏对象、组件|…

【C++】1. 命名空间

文章目录一、命名空间的由来二、命名空间的使用2.1 关键字&#xff1a;namespace2.2 访问命名空间里的标识符2.3 命名空间的特点三、总结一、命名空间的由来 当我们使用c语言编写项目时&#xff0c;可能遇到以下情况&#xff1a; 变量名与某个库函数名重复&#xff0c;导致保…

sscanf和snprintf格式化时间字符串的日期与时间戳相互转换用法

sscanf格式化时间字符串的用法 UTC&#xff1a;Coordinated Universal Time 协调世界时。因为地球自转越来越慢&#xff0c;每年都会比前一年多出零点几秒&#xff0c;每隔几年协调世界时组织都会给世界时1秒&#xff0c;让基于原子钟的世界时和基于天文学&#xff08;人类感知…

测试技术与信号处理实验报告

目录 金属箔式应变片——单臂电桥性能实验 金属箔式应变片——半桥性能实验 金属箔式应变片——全桥性能实验 差动变压器的性能实验 直流全桥的应用——电子秤实验 交流激励时霍尔式传感器的位移特性实验 电容式传感器的位移实验 磁电式转速传感器测速实验 金属箔式应变…

C++ -- 继承

文章目录1. 继承的概念和定义1.1 概念1.2 定义1.2.1 定义格式1.2.2 继承基类成员访问方式的变化2. 基类和派生类对象赋值转换3. 继承中的作用域4. 派生类的默认成员函数5. 继承与友元6. 继承与静态成员7. 复杂的菱形继承及菱形虚拟继承8. 继承和组合1. 继承的概念和定义 1.1 概…

听歌无线耳机哪个品牌好?2023适合听歌的好音质蓝牙耳机推荐

现如今&#xff0c;不管是听歌、追剧或是玩游戏&#xff0c;不少人喜欢戴蓝牙耳机进行。因为蓝牙耳机的功能更丰富&#xff0c;连接方便&#xff0c;还摆脱了线的束缚&#xff0c;使用起来更方便。那么&#xff0c;听歌无线耳机哪个品牌好&#xff1f;针对这个问题&#xff0c;…