搜尋
首頁Javajava教程Java Spring框架建立專案與Bean的儲存與讀取實例分析

1.Spring專案的建立

1.1建立Maven專案

第一步,建立Maven項目,Spring也是基於Maven的。

Java Spring框架建立專案與Bean的儲存與讀取實例分析

Java Spring框架建立專案與Bean的儲存與讀取實例分析

1.2加入spring依賴

第二步,在Maven專案中加入Spring的支援(spring-context , spring-beans)

pom.xml檔案中加入依賴項。

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

刷新等待載入完成。

Java Spring框架建立專案與Bean的儲存與讀取實例分析

1.3建立啟動類別

第三步,建立啟動類別與main,用來做簡單的測試

在java目錄創建類,寫程式碼即可,因為這裡只示範怎麼創建Spring專案和介紹Spring的簡單使用,就不依賴那些Tomcat什麼的了,直接寫一個Main類更直觀。

Java Spring框架建立專案與Bean的儲存與讀取實例分析

1.4配置國內源

由於國外源不穩定,可能第二步引入spring依賴會失敗,所以下面介紹如何配置國內鏡像來源。

Java Spring框架建立專案與Bean的儲存與讀取實例分析

Java Spring框架建立專案與Bean的儲存與讀取實例分析

現成的settings.xml檔案連結:

位址1

#位址2:提取碼:9thv

如果你已經有了settings文件,但沒有配置mirror,配置內容如下:

<mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>        
      </mirror>

2.儲存或讀取Bean物件

2.1新增spring設定檔

新增spring設定檔(第一次才需要,非第一次可忽略此步驟)

右鍵resources目錄,新建一個.xml#設定文件,檔案名稱推薦spring.xmlspring-config.xml

Java Spring框架建立專案與Bean的儲存與讀取實例分析

建立一個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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

2.2建立Bean物件

#第一步,建立Bean物件。

例如我們要注入一個User對象,就先的建立一個User類別。

package com.bean;
public class User {
    public void sayHi(String name) {
        System.out.println("你好!" + name);
    }
}

Bean透過設定文件,注入到spring中,即在spring設定檔中透過以下語句注入。

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

spring中物件的儲存是透過鍵值對來儲存的,其中keyidvalueclass

命名規格:id使用小駝峰命名,如useridclass使用大駝峰命名,如userId

2.3讀取Bean物件

想要從spring中將Bean物件讀取出來,先要得到spring上下文對象,相當於得到了spring。再透過spring上下文物件提供的方法取得需要使用的Bean物件。最後就能使用Bean物件了。

import com.bean.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
    public static void main(String[] args) {
        //1.得到上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        //2.获取bean对象,此处是根据id获取
        User user = (User) context.getBean("user");
        //3.使用bean
        user.sayHi("zhangsan");
    }
}

運行結果:

你好!zhangsan

Process finished with exit code 0

##也可以使用Bean工廠(舊)來獲取Bean。

import com.bean.User;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class Main2 {
    public static void main(String[] args) {
        //1.得到Bean工厂
        BeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring.xml"));
        //2.获取Bean
        User user = (User) factory.getBean("user");
        //3.使用
        user.sayHi("李四");
    }
}

雖然Bean工廠XmlBeanFactory類別現在已經廢棄了,但是目還能使用的,當然創建Bean工廠有新的方式,但老的方式比較直觀,因此演示採用老的方式創建。

運行結果:

你好!李四

Process finished with exit code 0

發現

ApplicationContextBeanFactory都可以從容器中取得Bean,都提供了getBean方法,那問題來了,ApplicationContext#與BeanFactory有什麼差別?

相同點:都可以從容器中取得

Bean,都提供了getBean方法。

不同點:

  • BeanFactoryApplicationContext的父類, BeanFactory只提供了基礎存取Bean物件的功能,而ApplicationContext除了擁有 BeanFactory的全部功能,還有其他額外功能的實現,如國際化,資源存取等功能實現。

  • 從效能方面來說是不同的,

    BeanFactory按需載入Bean,屬於懶漢方式,ApplicationContext#是餓漢方式,在創建時會將所有的Bean都加載,以備使用。

證明:

我们在bean目录下添加一个Blog类,并完善BlogUser类的构造方法,当类被构造时会发出一些信号,在获取上下文或工厂时根据这些信号让我们感知到它是否会被构造。

Java Spring框架建立專案與Bean的儲存與讀取實例分析

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main3 {
    public static void main(String[] args) {
        //1.得到上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
    }
}

运行结果:

Java Spring框架建立專案與Bean的儲存與讀取實例分析

ApplicationContext创建时,会将所有的对象都构造,饿汉的方式。

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class Main4 {
    public static void main(String[] args) {
        //1.得到Bean工厂
        BeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring.xml"));
    }
}

Java Spring框架建立專案與Bean的儲存與讀取實例分析

BeanFactory创建时,什么都没有,说明是懒汉的方式。

ApplicationContext中的多种getBean方法:

方法1:根据 bean name获取bean

User user = (User) context.getBean("user");

方法2:根据bean type获取bean

User user = (User) context.getBean(User.class);

只有beans中只有一个类的实例没有问题,但是个有多个同类的实例,会有问题,即在spring中注入多个同一个类的对象,就会报错。

我们来试一试,首先在Spring配置文件,注入多个User对象:

Java Spring框架建立專案與Bean的儲存與讀取實例分析

然后我们再通过这种方式来获取对象,我们发现报错了,报错信息如下:

Exception in thread "main" org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.bean.User' available: expected single matching bean but found 3: user,user1,user2

抛出了一个NoUniqueBeanDefinitionException异常,表示注入的对象不是唯一的。

方法3:综合上述两种,可以根据bean namebean type来获取bean

相比方法1,更加健壮。

User user = context.getBean("user", User.class);

以上是Java Spring框架建立專案與Bean的儲存與讀取實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器