Spring框架的创建和使用

目录

Spring框架概述

什么是Spring框架

什么是容器

什么是IoC容器

Spring的核心功能

IoC容器和普通程序开发的区别

DI

Spring项目的创建和使用

Spring项目创建

创建一个maven项目

添加Spring框架支持

添加一个启动类

Spring项目的使用

存储Bean对象

获取并使用Bean对象

 操作流程


Spring框架概述

什么是Spring框架

我们常说的Spring指的是Spring Framework(Spring 框架),是一个开源的框架,有着活跃且庞大的社区。同时Spring还支持广泛的引用场景,它可以让Java企业级的应用程序开发更加的简单。

总体来说Spring就是包含了众多工具方法的IoC容器。

上面这句话包含了两个重要信息,也是Spring的本质。那么什么是容器,什么又是IoC容器?

什么是容器

我们回想我们之前学过得容器,是干什么的。

比如:

  • List/Map是存储数据的容器。
  • Tomcat是存储Web网站的容器。

Spring里面的容器其实也是同样的性质,都是用来存储东西的。具体存储的是就是对象。

什么是IoC容器

在我们知道了什么是容器里面存储的是对象之后,那么IoC容器又是什么呢?

IoC:翻译成中文就是控制翻转的意思,也就说Spring是一个控制翻转的容器。

控制翻转具体控制的是啥,又把什么给翻转了?

对象的生命周期:在传统的开发过程中,对象的生命周期是由程序员直接控制的。然而在Spring中,对象的生命周期不在是程序员控制了,而是交给Spring,让Spring去管理和控制对象的生命周期。Spring本身右具有存储对象和获取对象的能力。控制的就是对象,翻转的就是对象的控制权。

这里的IoC是一种设计思想。

Spring的核心功能

上述描述我们知道了Spring是一个包含了众多工具方法的IoC容器。

既然是容器,那么具备的两个基本的功能:

  • 将对象存储在容器中
  • 从容器中获取对象

也就说Spring最核心的功能就是将对象如何存储到Spring中,再从Spring中如何获取对象的过程。

IoC容器和普通程序开发的区别

将对象存储到IoC容器中的好处:将对象存储到IoC容器中相当于将以后可能会用到的所有工具都制作好放到仓库中,需要的时候直接取就好了,用完再次放到仓库中去。然后普通程序开发是每次需要工具的时候,才先做,也就是new,当这个new出来的对象用完了之后,就直接扔掉,也不会保存,如果下次需要了还得new。这就是IoC容器和普通程序开发的区别。

使用IoC容器还有一个好处就是可以实现代码之间的解耦。

DI

提到IoC,不得不提就是DI,DI是Dependency Injection的缩写,中文就是依赖注入的意思。

所谓的依赖注入,就是在IoC容器运行的过程中,动态的将某种依赖关系注入到对象之中。

依赖注入(DI)和控制翻转(IoC)都是在不同的角度描述一件事情。就是值通过引入IoC容器,利用依赖注入的方式,实现对象直接的解耦。

IoC是一种设计思想,而DI则是一种具体的实现方式。

Spring项目的创建和使用

前面我们说了那么多,那么接下来我们就创建一个Spring项目。


Spring项目创建

Spring项目是通过Maven的方式来创建一个Spring项目,创建Spring项目总共可以分为3步:

  1. 创建一个普通的maven项目
  2. 添加Spring框架支持(spring-conext、spring-beans)
  3. 添加一个启动类。

解下来我们一步一步来:

创建一个maven项目

点击下一步:

 

添加Spring框架支持

在创建好的项目中,有一个pom.xml文件,在里面添加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>

从上述添加的框架中可以看出,添加的框架有spring-context和spring-beans

spring-context:   spring的上下文

spring-beans:    spring管理对象的模块

从这里就能看出spring框架与传统开发的区别就是针对对象(在spring中Bean)的管理。

添加一个启动类

最后在创建好的项目中,src/main/java这个路径中创建一个启动类,包含一个main方法即可。

public class App {public static void main(String[] args) {}
}

经过上述步骤之后,我们就成功的创建了一个spring项目。注意在上述创建的过程中,如果出现pom.xml文件里面爆红现象,那么就是maven的国内源没有配置上。关于maven国内源的配置,这里不在过多赘述。

Spring项目的使用

当我们在创建好了spring项目之后,我们就得使用spring项目了。

前面已经说过,spring的核心功能:

  • 存储Bean对象
  • 获取Bean对象

接下来spring的使用也将围绕着这两个Spring的核心功能来使用。

存储Bean对象

在存储Bean对象之前我们先要有Bean对象,这里Bean对象就是就是普通的对象。

我们先创建一个Bean对象:

 在src/main/java下面创建了如上目录。

User类如下:

package com.dgz.domo;public class User {private int userId;private String name;public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}public String getName() {return name;}public void setName(String name) {this.name = name;}public void sayHi() {System.out.println("Hi spring");}@Overridepublic String toString() {return "User{" +"userId=" + userId +", name='" + name + '\'' +'}';}
}

这样我们就有了一个Bean对象。

接下来我们需要把这个Bean对象存储到Spring中,在存储之前,我们需要创建一个Spring配置文件。

在resources文件夹下面创建一个spring-config.xml文件:

并在spring-config.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对象即可。

接下来我们将User对象注册到Spring中,具体操作是在beans标签中添加一个bean标签,然后在里面添加注册User对象的属性即可。

    <bean id="user" class="com.dgz.domo.User"></bean>

 这里id就是我们在将来获取Bean对象的时候需要填写的属性。class为User这个类的具体路径。

经过上述的操作我们就将一个Bean对象完成的注册到(存储到)Spring中去了。

获取并使用Bean对象

获取并使用Bean对象一共分为3步:

  1. 得到Spring上下文对象,因为对象都交给Spring去管理了,所以获取要到Spring中获取,那么就要得到Spring的上下文对象。
  2. 通过Spring上下文对象,获取某一个指定的Bean对象。
  3. 使用Bean对象

获取Spring上下文对象

Spring上下文可以通过使用ApplicationContext来获取到。

我们在启动类中可以通过如下代码来获取上下文对象:

//得到Spring上下文对象,创建的时候需要配置Spring的配置信息ApplicationContext context = new 
ClassPathXmlApplicationContext("spring-config.xml");

除了ApplicationContext之外,我们还可以使用BeanFactory来作为Spring的上下文对象。

如下代码所示:

//使用BeanFactoryBeanFactory factory = new 
XmlBeanFactory( new ClassPathResource("spring-config.xml"));

这两个获取Spring上下文对象的区别:(面试题)

ApplicationContext和BeanFactory的区别:

  1. ApplicationContext是BeanFactory的子类,ApplicationContext拥有更多功能。
  2. 加载Bean的机制不同,BeanFactory懒加载,按需加载,(使用一个bean加载一个Bean) ApplicationContext则是一次性加载所有的Bean对象。
  3. ApplicationContext启动慢,但是启动之后获取对象非常快 BeanFactory启动快,占用内存很少,但是后期获取对象非常慢。

获取指定的Bean对象

如下代码:

public class App {public static void main(String[] args) {//得到Spring上下文对象ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");//使用BeanFactoryBeanFactory factory = new XmlBeanFactory( new ClassPathResource("spring-config.xml"));//使用ApplicationContext的方式来获取Bean对象User user = (User) context.getBean("user");}
}

这里需要注意我们在getBean里面的参数是不是很熟悉,这个参数就是我们之前在spring-config.xml文件中配置的id属性。

这里的id要一一对应:

 getBean的更多用法:

getBean有很多重载的方法,我们也可以通过其他的方式来获取Bean对象,比如下面这种:

        //根据类型来获取BeanUser user1 = context.getBean(User.class);//根据id+类型来获取BeanUser user2 = context.getBean("user",User.class);

 这两种方式的区别就是当有一个类被重复的注册到spring-config.xml中的时候,就只能使用名称获取了

 我们把一个类重复的注册到spring-config.xml中,然后再通过上述两种方式来获取,就会发现报错了。

上述这个错误就是说找到了两个user对象,但是获取的方式无法区分到底是要获取那个Bean,这时就要使用id的获取方式获取id+类型的方式。

使用Bean对象

由于我们之前已经通过各种的方式获取到了Bean对象,这时我们就能使用Bean对象了。

public class App {public static void main(String[] args) {//得到Spring上下文对象ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");//使用BeanFactoryBeanFactory factory = new XmlBeanFactory( new ClassPathResource("spring-config.xml"));//使用ApplicationContext的方式来获取Bean对象//根据id来获取BeanUser user = (User) context.getBean("user");//根据类型来获取Bean// User user1 = context.getBean(User.class);//根据id+类型来获取Bean/* User user2 = context.getBean("user",User.class);User user3 = context.getBean("user1",User.class);*///使用Bean对象user.sayHi();}
}

 操作流程

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

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

相关文章

应用级监控方案Spring Boot Admin

1.简介 Spring Boot Admin为项目常用的监控方式&#xff0c;可以动态的监控服务是否运行和运行的参数&#xff0c;如类的调用情况、流量等。其中分为server与client&#xff1a; server&#xff1a; 提供展示UI与监控服务。client&#xff1a;加入server&#xff0c;被监控的…

vue3,elementPlus和自己封装,点击 新增添加表单,删除表单,提交数据

ElementPlus下的form也有新增表单 如果你写H5等没找到合适的 自己也可以进行封装 实现3个代码讲解:1&#xff1a;ElementPlus的代码 2&#xff1a;自己书写的代码 3&#xff1a;自己把2的代码进行封装 1&#xff1a;ElementPlus的运行效果 点击提交 1&#xff1a;ElementPlus…

Python教程(3)——python开发工具vscode的下载与安装

Python的开发工具有很多款&#xff0c;很多都是非常好用的&#xff0c;其中vscode作为其中一款Python的开发工具&#xff0c;是非常轻量级的&#xff0c;今天我们来介绍一下vs code的下载与安装。 vscode的下载与安装 首先需要到vscode的官网&#xff0c;这个谷歌或者百度一下…

VSCode 注释后光标快速定位下一行

VSCode默认用 Ctrl / 注释一行时&#xff0c;光标停留在该行中。下面介绍如何注释后&#xff0c;光标会自动移动到下一行。 1.【View】 ->【Extensions】->【查找并安装Multi-command 扩展】 2.【File 】 -> 【Preferences 】->【Keyboard Shortcuts】&#xff08…

【人工智能】xAI——“X宇宙”又增添了一位新成员

个人主页&#xff1a;【&#x1f60a;个人主页】 &#x1f31e;热爱编程&#xff0c;热爱生活&#x1f31e; 文章目录 前言xAI团队成员做解开宇宙本质的AI 前言 有人问他&#xff0c;xAI公司是干啥的&#xff1f;马斯克的回答引用了其偶像、科幻作家道格拉斯・亚当斯的话&…

Python实现将pdf,docx,xls,doc,wps,zip,xlsx,ofd链接下载并将文件保存到本地

前言 本文是该专栏的第31篇,后面会持续分享python的各种干货知识,值得关注。 在工作上,尤其是在处理爬虫项目中,会遇到这样的需求。访问某个网页或者在采集某个页面的时候,正文部分含有docx,或pdf,或xls,或doc,或wps,或ofd,或xlsx,或zip等链接。需要你使用python自…

【运维小知识】(四)——linux常用命令

运维专栏&#xff1a;运维小知识 目录 1.&#x1f341;&#x1f341;用mv命令修改文件名 2.&#x1f343;&#x1f343;创建及删除文件夹即文件夹下所有文件 3.&#x1f342;&#x1f342;移动文件夹并重命名 4.&#x1f33f;&#x1f33f;复制文件 5.&#x1f344;&#x…

Python 算法基础篇之字符串操作:索引、切片、常用方法

Python 算法基础篇之字符串操作&#xff1a;索引、切片、常用方法 引言 1. 字符串的概念和创建2. 字符串的索引3. 字符串的切片4. 字符串的常用方法 a ) 查找子字符串 b ) 替换子字符串 c ) 拆分和连接字符串 总结 引言 字符串是一种常见的数据类型&#xff0c;在 Python 中对…

ARM微控制器 AM2432BSEFHIALXR、AM2432BSFFHIALV技术参数(32位MCU)

1、AM2432BSEFHIALXR 32位MCU采用293引脚FCCSP封装&#xff0c;工作频率最高可达800MHz。该微控制器专为需要结合处理和实时通信的工业应用而构建&#xff0c;例如远程I/O模块和电机驱动器。 核心处理器&#xff1a;ARM Cortex-M4F&#xff0c;ARM Cortex-R5F 内核规格&#xf…

pytest 禁用警告信息(忽略警告信息输出)

如图示例代码&#xff0c;提示test_001这个case 存在警告 新增pytest.ini 配置文件 [pytest] filterwarnings errorignore::UserWarning

携带时间戳主动写入数据到prometheus service(可乱序、go)

使用到的github公开项目 https://github.com/castai/promwrite Prometheus版本2.45.0 拉下来装依赖&#xff0c;然后使用 client_test.go t.Run(“write with custom options”, func(t *testing.T) 这个测试用例里面&#xff0c;删掉srv初始化的部分&#xff0c;这个是模拟一…

本地生活直播,和电商直播有什么不一样?

直播正在成为零售业的标配&#xff0c;当下最新的一条赛道是“本地生活直播”。 &#xff08;商家开始在美团等平台进行本地生活直播。摄影&#xff1a;李崧稷&#xff09; 今年618&#xff0c;在老牌电商平台拉着无数网店&#xff0c;拼尽全力想要堆高销量的时候&#xff0c;一…

微信小程序导入微信地址

获取用户收货地址。调起用户编辑收货地址原生界面&#xff0c;并在编辑完成后返回用户选择的地址。 1&#xff1a;原生微信小程序接口使用API&#xff1a;wx.chooseAddress(OBJECT) wx.chooseAddress({success (res) {console.log(res.userName)console.log(res.postalCode)c…

TensorFlow模块简介

TensorFLow框架内构建了很多高层次的API&#xff0c;可以显著减少编写程序的代码量&#xff0c;其中包含众多网络结构相关函数和数据载入、数据处理的方法。 tf.data.Dataset tf.data.Dataset是TensorFlow内置的数据输入模块&#xff0c;提供了专门用于数据输入的多种方法&am…

【Linux】进程间通信——管道/共享内存

文章目录 1. 进程间通信2. 管道匿名管道命名管道管道的特性管道的应用&#xff1a;简易的进程池 3. System V共享内存共享内存的概念共享内存的结构共享内存的使用代码实现 1. 进程间通信 进程间通信&#xff08;Inter-Process Communication&#xff0c;简称IPC&#xff09;是…

详细解析张雪峰老师对计算机专业的评价“进可攻,退可守”--【职场篇】

文章目录 张雪峰的评价计算机行业类的总结性指示就业面宽本科也不太卷的方向进可攻&#xff0c;退可守另一个就业出口--培训高校&#xff0c;大专&#xff0c;高职&#xff0c;科研机构&#xff0c;中小学计算机老师等等 就业总结导图持续学习&#xff0c;技术过人 总结 张雪峰…

你认为大数据的特点是什么?_光点科技

随着信息技术的迅猛发展&#xff0c;大数据已成为当今社会不可忽视的重要资源。它是指规模庞大且快速增长的数据集合&#xff0c;其中包含着宝贵的信息和见解。大数据的特点是多样而复杂的&#xff0c;它们塑造了我们的世界并深刻地影响着各行各业。 巨大的规模&#xff1a;大数…

消息重试框架 Spring-Retry 和 Guava-Retry

一 重试框架之Spring-Retry 1.Spring-Retry的普通使用方式 2.Spring-Retry的注解使用方式 二 重试框架之Guava-Retry 总结 图片 一 重试框架之Spring-Retry Spring Retry 为 Spring 应用程序提供了声明性重试支持。它用于Spring批处理、Spring集成、Apache Hadoop(等等)。…

Maven -- <dependencyManagement>管理子项目版本

背景&#xff1a; 一个旧项目&#xff0c;想使用mybatis-plus&#xff0c;想着这是比较基础的依赖包&#xff0c;就在父项目中添加对应依赖&#xff0c;如下: <!-- 依赖声明 --><dependencyManagement><dependencies><!-- mybatis-plus 依赖配置 -->&l…

Java Arrays类

Arrays类 介绍 用于管理或操作数组(比如排序和搜索) 常用方法 1、Arrays.toString(ints)&#xff1a;返回数组的字符串形式 int[] ints {1, 2, 3, 4, 5}; System.out.println(Arrays.toString(ints));2、sort排序(自然排序和定制排序) import java.util.Arrays; import …