> 文章列表 > Spring项目创建与 Spring Bean 的存储与读取

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

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

Free Fonts Download