> 文章列表 > 【SSM框架】spring的创建与使用

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

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

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项目

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

添加Spring依赖

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

下面是查找依赖的步骤

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

【SSM框架】spring的创建与使用
我们通常用的jdk是1.8版本的,如果选择6.x 版本的他支持JDK 17+的,我用的是jdk8,就必须使用5.x的。
【SSM框架】spring的创建与使用
将复制下来的依赖文本复制到pom.xml中的< dependencies >标签内
【SSM框架】spring的创建与使用
点击刷新按钮,让依赖注入到spring中
【SSM框架】spring的创建与使用

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

添加启动类

【SSM框架】spring的创建与使用
【SSM框架】spring的创建与使用
综上,我们就创建成功了一个Spring 项目,接下来我们就对Spring项目进行,对象(Bean)存储到容器(Spring)中,从容器中将对象取出来。

将bean存储到Spring 中

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

创建bean对象

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

将bean对象存储到Spring容器中

在resources底下创建spring-config.xml
【SSM框架】spring的创建与使用
在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>

【SSM框架】spring的创建与使用
这一步我们就把bean对象存储到了Spring容器中,对象的名称是student,接下来我们就要开始从Spring容器中获取bean对象了。

从Spring中获取bean

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

创建Spring(上下文)对象

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

从Spring中获取到bean对象

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

使用Bean(非必须)

【SSM框架】spring的创建与使用
综上我们就把Spring的创建和使用就解释清楚了,但是本博客还没有结束,还需要解释一下得到Spring上下文的的方法ApplicationContext,有几种获取Bean的方式,以及还有其他的能够获取上下文的方法BeanFactory。

从spring中获取Bean的3种方式

我们先做个准备工作创建一个Student类型的bean对象【SSM框架】spring的创建与使用

将bean对象存储到Spring容器中
【SSM框架】spring的创建与使用

Ⅰ通过Bean名称获取

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

Ⅱ 通过类型的方式获取

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

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

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

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

我们会有这样的一个疑问,我们存储多个实例,是只创建一个对象,还是存储一次多一个对象呢?
这个问题我们用代码就可以验证成功了
【SSM框架】spring的创建与使用
输出结果很明显的表明了并不是存储多个实例只创建一个对象。

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

ApplicationContext VS BeanFactory

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

运行结果:
【SSM框架】spring的创建与使用
通过运行结果可知,ApplicationContext获取Spring上下文的时候,一次性加载并初始化了所有的bean对象。
BeanFactory 是一个lazy load过程,只有调用getBean的时候,对应的bean对象才加载。
通过上述区别可以看出,

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

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