網(wǎng)頁設計公司金華關鍵詞排名優(yōu)化公司外包
文章目錄
- 前言
- 一、Spring 項目的創(chuàng)建
- 1.1 創(chuàng)建 Maven 項目
- 1.2 添加 Spring 框架支持
- 1.3 添加啟動類
- 二、儲存 Bean 對象
- 2.1 創(chuàng)建 Bean
- 2.1 將 Bean 注冊到 Spring 容器
- 三、獲取并使用 Bean 對象
- 3.1 獲取Spring 上下文
- 3.2 ApplicationContext 和 BeanFactory 的區(qū)別
- 3.3 獲取指定的 Bean 對象
- 四、總結
前言
通過前面的文章我們知道了,Spring 其實就是一個包含了眾多工具的 IoC 容器。既然是容器那么主要就涉及到兩個操作,即:
- 將對象儲存到 Spring 容器中;
- 使用的使用將對象從 Spring 容器中取出。
因此,學習 Spring 容器,主要就是學習它的存取操作。下文詳細介紹了 Spring 項目的創(chuàng)建與使用。
一、Spring 項目的創(chuàng)建
下文將以 Maven 的方式來創(chuàng)建一個 Spring 項目,創(chuàng)建 Spring 項目的方式與 Servlet 類似,主要分為以下三步驟:
- 創(chuàng)建 Maven 項目;
- 添加 Spring 框架支持;
- 添加啟動類。
以下就是圍繞這三個步驟來創(chuàng)建 Spring 項目的具體過程。
1.1 創(chuàng)建 Maven 項目
創(chuàng)建好后其目錄結構如下:
1.2 添加 Spring 框架支持
- 在 Maven 中央倉庫搜索 Spring,選擇 “Spring Context”:
- 選擇
5.xxxx
版本
- 選擇 Maven,然后將其復制粘貼到
pom.xml
文件中
最后的 pom.xml
文件樣式如下:
1.3 添加啟動類
即在 Java
目錄下創(chuàng)建一個類,其中包含一個 main
方法即為啟動類:
二、儲存 Bean 對象
什么是 Bean:
在 Spring 框架中,Bean 是一個非常重要的概念,它是Spring容器中被管理和維護的對象。Bean 可以是任何的Java對象,例如 POJO(Plain Old Java Object)、實體類、服務類等。這些對象在 Spring 容器中被實例化、組裝、管理和銷毀,以提供各種功能和服務。
儲存 Bean 分為兩個步驟:
- 先創(chuàng)建 Bean 類;
- 然后將創(chuàng)建的 Bean 注冊到 Spring 容器中。
2.1 創(chuàng)建 Bean
此處以一個 Student 類為例:
public class Student {public Student(){System.out.println("init student");}public void sayHi(){System.out.println("Hi, I am a student.");}
}
2.1 將 Bean 注冊到 Spring 容器
要想將 Bean 對象注冊到 Spring 容器中,首先需要在 resources
目錄下創(chuàng)建一個配置文件,一般取名為 spring-config.xml
:
Spring 配置文件的固定為以下內(nèi)容:
<?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 http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
</beans>
然后將 Student 對象注冊到 Spring 中,即在 <beans>
添加以下配置:
其中 id
字段表示給 Bean 取的名,class
字段則是 包名 + 類名
。
三、獲取并使用 Bean 對象
獲取并使用 Bean 對象也大致可分為以下三步:
- 獲取 Spring 上下文對象,因為對象都交給 Spring 管理了,所有要獲取 Spring 中的 Bean,首先就需要獲取 Spring;
- 通過回去的 Spring 上下文對象,獲取指定的 Bean 對象;
- 使用 Bean 對象。
3.1 獲取Spring 上下文
獲取 Spring 上下文對象的方式主要有兩個,即使用ApplicationContext
和BeanFactory
來獲取。
1. 使用ApplicationContext
獲取
public static void main(String[] args) {ApplicationContext context =new ClassPathXmlApplicationContext("spring-config.xml");}
2. 使用BeanFactory
獲取
public static void main(String[] args) {BeanFactory beanFactory =new XmlBeanFactory(new ClassPathResource("spring-config.xml"));}
3.2 ApplicationContext 和 BeanFactory 的區(qū)別
此時,分別執(zhí)行 ApplicationContext
和 BeanFactory
獲取 Spring 上下文對象的 main
方法:
ApplicationContext
:
此時,可以發(fā)現(xiàn)當使用 ApplicationContext
獲取 Spring 上下文的時候,會立即初始化 Spring 容器中的 Bean 對象。
BeanFactory
:
當使用BeanFactory
獲取 Spring 上下文的時候,并沒有立即初始化 Spring 中的 Bean 對象,而是在獲取 Bean 對象的時候才初始化,即是一種懶加載模式。
ApplicationContext
和 BeanFactory
之間的區(qū)別可總結如下:
繼承關系和功能層面:
ApplicationContext
接口繼承了BeanFactory
接口,其中BeanFactory
提供了基礎的訪問容器的能力,而ApplicationContext
除了繼承BeanFactory
的所有功能之外,還擁有獨特的功能,比如添加了對國際化的支持、資源的訪問支持、事件傳播等方面的支持。
性能方面:
ApplicationContext
是?次性加載并初始化所有的 Bean 對象,而BeanFactory
是需要哪個 Bean 對象的時候才會去加載,因此更加輕量。- 因此當性能要求較高而內(nèi)存充足的場景下推薦使用
ApplicationContext
;而在內(nèi)存空間較小,對性能要求不高的場景下推薦使用BeanFactory
。
3.3 獲取指定的 Bean 對象
- 直接通過 Bean 對象的名稱獲取
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
Student student = (Student) context.getBean("student");
getBean
方法直接通過 Bean 對象的名稱獲取返回的是一個 Object
對象,因此需要強制類型轉(zhuǎn)換。
- 通過 Bean 的類型獲取
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
Student student = context.getBean(Student.class);
getBean
方法通過 Bean 對象的類型獲取,此時不需要進行強制類型轉(zhuǎn)換,但是這種方法存在一個問題:如果當 Spring 容器中存在多個相同類型的 Bean 對象的時候就會出現(xiàn)歧義,即找不到返回哪個對象。
比如在 Spring 容器中再添加一個 Student 對象:
此時啟動 main
函數(shù)的時候,就會出現(xiàn)如下問題:
此時,Spring 容器中存在兩個相同類型的 Bean 對象,而通過類型獲取的話,就不知道獲取哪一個了。因此要解決這個問題就可以采用 通過 Bean 名稱 + 類型獲取
。
- 通過 Bean 名稱 + 類型獲取
public static void main(String[] args) {ApplicationContext context =new ClassPathXmlApplicationContext("spring-config.xml");Student student = context.getBean("student", Student.class);Student student2 = context.getBean("student2", Student.class);student.sayHi();student2.sayHi();}
此時,通過 Bean 名稱 + 類型獲取的方式,即使是 Spring 容器中存在多個相同類型的 Bean 對象,但由于其名稱不同,也能夠正確獲取到指定的 Bean 對象。
四、總結
以上詳細介紹了 Spring 項目的創(chuàng)建和使用過程,下面是對其整個流程的總結。
- 通過 Maven 項目創(chuàng)建 Spring 項目,并且還要添加對 Spring 框架的支持;
- 創(chuàng)建 Bean 對象,然后通過
spring-config.xml
配置文件將其儲存到 Spring 容器中; - 獲取 Bean 對象:
- 首先通過
ApplicationContext
或者BeanFactory
獲取配置文件,即獲取 Spring 上下文對象。 - 通過
getBean
方法獲取 Bean 對象。 - 使用 Bean 對象。
- 首先通過