您现在的位置是:首页 >学无止境 >Spring项目创建与 Spring Bean 的存储与读取网站首页学无止境

Spring项目创建与 Spring Bean 的存储与读取

你不应该热爱 2023-05-23 06:48:29
简介Spring项目创建与 Spring Bean 的存储与读取

目录

一、创建Spring项目

1.1 创建Maven项目

1.2 添加 Spring 框架依赖

1.3 添加启动类

二、Bean对象的创建与存储

2.1 创建Bean

2.2 将Bean注册到容器

2.3 获取并使用Bean对象

2.3.1 创建Spring上下文

2.3.2 从Spring容器中获取Bean对象​编辑

延申(多种方式获取Bean):

2.3.3 使用bean

2.3.4 ApplicationContext VS BeanFactory(常见面试题)

三、总结


前言:我们知道,Spring 就是⼀个包含了众多⼯具⽅法的 IoC 容器。既然是容器那么它就具备

两个最基本的功能:

  • 将对象存储到容器(Spring)中;
  • 从容器中将对象取出来。

一、创建Spring项目

接下来使⽤ Maven ⽅式来创建⼀个 Spring 项⽬,创建 Spring 项⽬和 Servlet 类似,总共分为以下 3步:

  1. 创建⼀个普通 Maven 项⽬。
  2. 添加 Spring 框架⽀持(spring-context、spring-beans)。
  3. 添加启动类。

在 Java 语⾔中对象也叫做 Bean,所以后⾯咱们再遇到对象就以 Bean 著称。

1.1 创建Maven项目

 当目录变成如下所示时,Maven项目就初始化好了。

 

1.2 添加 Spring 框架依赖

从中央仓库中下载Spring Context的依赖:

1.3 添加启动类

最后在创建好的项目Java文件夹下创建一个启动类,包含main方法即可:

二、Bean对象的创建与存储

2.1 创建Bean

所谓的 Bean 就是 Java 语⾔中的⼀个普通对象,实现代码如下:

2.2 将Bean注册到容器

 在创建好的项目中添加 Spring 配置文件 spring-config.xml,将此文件放在resources的根目录下:

Spring 配置⽂件的固定格式为以下内容(无需记忆):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

接下来,再将Student对象注册到Spring中即可,具体操作如下:

2.3 获取并使用Bean对象

获取并使用Bean对象,分为以下三步:

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

如果取多个 Bean 的话重复以上第 2、3 步骤。

2.3.1 创建Spring上下文

利用ApplicationContext来创建Spring 上下文:

 需要注意的是:这里的路径必须与Spring配置文件的名称相同,否则无法创建成功。

2.3.2 从Spring容器中获取Bean对象

延申(多种方式获取Bean):

1.通过名称获取:

2.通过类型获取:

需要注意,如果Spring中一个类型存储了多个实例,那么使用类型获取Bean就会报错:

在一个类在bean中存储了两次,那么这两个bean地址是否相同呢,我们来验证一下:

因此,这里创建的两个不同的bean实例,地址是不同的,不会因为存的是同一个类的bean就地址一样。

3.通过名称+类型方式获取:

2.3.3 使用bean

import com.spring.demo.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {
        //1.得到Spring的上下文对象,创建的时候需要配置 Spring配置 的信息
        ApplicationContext context =
                new ClassPathXmlApplicationContext("Spring-config.xml");
        //2。从Spring容器中获取到Bean对象
           Student student = (Student)context.getBean("student");
           //3.使用Bean(非必须的)
           student.sayHi();
    }
}

运行结果:

2.3.4 ApplicationContext VS BeanFactory(常见面试题)

除了ApplicationContext之外,我们还可以使用BeanFactory来作为Spring的上下文,如下代码所示:

我们发现,好像在当前的场景下,ApplicationContext 和 BeanFactory 效果是一样的,这是因为ApplicationContext属于BeanFactory的子类:

既然是两者之间存在继承关系,那我们来看看两者之间有哪些区别:

我们先在com.spring.demo包下创建一个Teacher类:

 并在Spring配置文件下,把Teacher存到Spring中:

观察两者的区别:

可以发现,Application是一次性加载并初始化所有的Bean对象,而BeanFactory属于懒加载,是需要哪个才去加载哪个,因此BeanFactory更加轻量。

ApplicationContext 和 BeanFactory的区别总结

  • 继承关系和功能⽅⾯来说:Spring 容器有两个顶级的接⼝:BeanFactory 和ApplicationContext。其中 BeanFactory 提供了基础的访问容器的能⼒,⽽ApplicationContext属于 BeanFactory 的⼦类,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性,还添加了对国际化⽀持、资源访问⽀持、以及事件传播等⽅⾯的⽀持。
  • 从性能⽅⾯来说:ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象,⽽BeanFactory 是需要那个才去加载那个,因此更加轻量,因此ApplicationContext比较费内存,一次性加载完成,但是在之后的读取速度会非常快,而BeanFactory因为需要节省内存,调用时才加载初始化bean,所有效率不高。

三、总结

a.创建Spring项目

  1. 创建一个maven项目
  2. 添加Spring-context依赖
  3. 创建一个启动类(为后面从Spring容器中获取bean做准备)

b.存储Bean

  1. 先创建Bean对象
  2. 通过Spring配置文件(spring-config.xml)<bean id="bean名称" class="包名+类名" ></bean>

c.读取bean

  1. 得到Spring对象(ApplicationContext,BeanFactory)
  2. 通过Spring对象 getBean方法获取Bean对象【DI操作】
  3. 非必须:使用bean

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。