中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring?Bean的配置與實例化怎么實現

發布時間:2022-06-13 14:16:25 來源:億速云 閱讀:143 作者:iii 欄目:開發技術

這篇文章主要介紹“Spring Bean的配置與實例化怎么實現”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Spring Bean的配置與實例化怎么實現”文章能幫助大家解決問題。

一、 Spring Bean 配置方式

由 Spring IoC 容器管理的對象稱為 Bean,Bean 配置方式有兩種:配置文件開發注解開發

配置文件開發

Spring 配置文件支持兩種格式:xml和properties,此教程以xml配置文件講解。

XML 配置文件的根元素是 <beans>,該元素包含了多個子元素 <bean>。每一個 <bean> 元素都定義了一個 Bean

Spring?Bean的配置與實例化怎么實現

XML 配置文件常用元素表

屬性名稱描述
idBean 的唯一標識符,Spring IoC 容器對 Bean 的配置和管理都通過該屬性完成。
nameBean 的別名,可以通過 name 屬性為同一個 Bean 同時指定多個名稱,每個名稱之間用逗號或分號隔開。
class指定了Bean 的具體實現類,它必須是一個類的全限定名。
scopeBean 的作用域,屬性值可以為 singleton(單例)、prototype(原型)、request、session 和 global Session。默認值是 singleton。

注解開發

先插個眼在這,過幾天會發一篇文章詳細介紹

二、Spring Bean實例化

通過控制反轉,對象的創建權就交給了IoC容器,但是容器是如何來創建對象的呢?

bean本質上就是對象,對象在new的時候會使用構造方法,創建bean其實也是使用構造方法完成的。

實例化bean的三種方式:構造方法,靜態工廠和實例工廠

環境準備

1.準備一個UserDao接口和一個UserDaoImpl實現類

//UserDao接口
public interface UserDao {
    public void say();
}
//UserDaoImpl實現類
public class UserDaoImpl implements UserDao {
    @Override
    public void say() {
        System.out.println("Hello,I am BigHorn!");
    }
}

2.編寫spring配置文件

<bean id="userDao" class="com.bighorn.dao.impl.UserDaoImpl"/>

3.編寫運行程序

public class App {
    public static void main(String[] args) {
        //獲取IoC容器
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //從容器中獲取對象
        UserDaoImpl userDao = context.getBean("userDao", UserDaoImpl.class);
        userDao.say();
    }
}

構造方法實例化Bean

第一種實例化bean的方法:構造方法實例化,這也是最常用的方法,因為類都會提供默認的構造方法。下面來測試下

1.在UserDaoImpl類中添加一個無參構造方法,并打印一句話,方便觀察結果。

public class UserDaoImpl implements UserDao {
    //添加一個無參構造方法
    public UserDaoImpl() {
        System.out.println("這是UserDaoImpl的無參構造方法");
    }

    @Override
    public void say() {
        System.out.println("Hello,I am BigHorn!");
    }
}

可以在控制臺看到輸出結果,說明Spring IoC 容器創建對象時用的也是構造方法

Spring?Bean的配置與實例化怎么實現

2.將構造方法改成private測試

public class UserDaoImpl implements UserDao {
    //將構造方法改成private
    private UserDaoImpl() {
        System.out.println("這是UserDaoImpl的無參構造方法");
    }

    @Override
    public void say() {
        System.out.println("Hello,I am BigHorn!");
    }
}

發現還可以運行成功,這說明Spring底層用的是反射,訪問到類中的私有構造方法。

Spring?Bean的配置與實例化怎么實現

3.將無參構造方法換成有參構造方法

public class UserDaoImpl implements UserDao {
    //將無參構造方法換成有參構造方法
    private UserDaoImpl(int i) {
        System.out.println("這是UserDaoImpl的無參構造方法");
    }
    @Override
    public void say() {
        System.out.println("Hello,I am BigHorn!");
    }
}

程序會報java.lang.NoSuchMethodException錯,說明Spring底層使用的是類的無參構造方法

Spring?Bean的配置與實例化怎么實現

4.畫個圖總結下:Spring 配置文件中 bean 標簽的 id 和類的全限定名一一對應,所以 Spring IoC容器的 getBean 方法其實就是先根據 bean 的 id 獲取該類的全限定名,然后再利用反射根據類的全限定名創建對象并返回。

Spring?Bean的配置與實例化怎么實現

靜態工廠實例化Bean

第二種實例化Bean的方法:靜態工廠實例化

了解即可,一般是用來兼容早期的一些老系統。

1.創建一個UserDaoFactory工廠類并提供一個靜態方法

//UserDao接口
public interface UserDao {
    public void say();
}
//UserDaoImpl實現類
public class UserDaoImpl implements UserDao {
    public UserDaoImpl() {
        System.out.println("這是UserDaoImpl的無參構造方法");
    }
    @Override
    public void say() {
        System.out.println("Hello,I am BigHorn!");
    }
}
//UserDaoFactory工廠類
public class UserDaoFactory {
    //靜態工廠創建對象
    public static UserDao getUserDao(){
        System.out.println("這是靜態工廠實例化Bean");
        return new UserDaoImpl();
    }
}

2.編寫spring配置文件

<!--
        class:工廠類全類名
        factory-method:工廠創建對象的方法名
     -->
<bean id="userDao" class="com.bighorn.factory.UserDaoFactory" factory-method="getUserDao"/>

3.編寫運行程序

public class App {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        //獲取IoC容器
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //從容器中獲取對象
        UserDaoImpl userDao = context.getBean("userDao", UserDaoImpl.class);
        userDao.say();
    }
}

看見運行結果,輸出以下語句

Spring?Bean的配置與實例化怎么實現

實例工廠實例化Bean

第二種實例化Bean的方法:實例工廠實例化

了解即可,其實和靜態工廠差不多。只不過靜態工廠可以直接通過靜態方法創建bean,實例工廠要先new一個實例工廠對象,然后再通過這個實例工廠對象創建bean

1.創建一個UserDaoFactory工廠類,和靜態工廠不一樣的是,實力工廠提供的是一個普通方法

//UserDaoFactory工廠類
public class UserDaoFactory {
    //實例工廠創建對象
    public  UserDao getUserDao(){
        System.out.println("這是實例工廠實例化Bean");
        return new UserDaoImpl();
    }
}

2.編寫spring配置文件

<!--
         userFactory:工廠的實例對象
         factory-bean:指向工廠的實例對象
         factory-method:工廠對象中創建對象的方法名
    -->
<bean id="userFactory" class="com.bighorn.factory.UserDaoFactory"/>
<bean id="userDao" factory-bean="userFactory" factory-method="getUserDao"/>

3.運行程序和靜態工廠一樣,查看運行結果

Spring?Bean的配置與實例化怎么實現

FactoryBean

實例工廠的方法聽麻煩的,其實spring框架為我們一種實例工廠的方式:FactoryBean,比較實用,用來整合其他框架

我們只需要實現FactoryBean接口即可簡化開發,下面來介紹下它的具體使用方法

1.創建UserDaoFactoryBean類,實現FactoryBean接口中的三個方法:

  • boolean isSingleton():設置bean作用域,默認true表示單例,false表示非單例

  • T getObject() throws Exception:返回的是bean實例對象

  • Class<?> getObjectType():返回的是被創建類的Class對象

public class UserDaoFactoryBean implements FactoryBean<UserDao> {
    //bean作用域:默認true表示單例
    public boolean isSingleton() {
        return true;
    }
    //代替實例工廠中創建對象的方法
    public UserDao getObject() throws Exception {
        System.out.println("這是FactoryBean實例化bean");
        return new UserDaoImpl();
    }
    //返回所創建類的Class對象
    public Class<?> getObjectType() {
        return UserDao.class;
    }
}

2.編寫spring配置文件

<bean id="userDao" class="com.bighorn.factory.UserDaoFactoryBean"/>

3.編寫運行程序

public class App {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        //獲取IoC容器
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //從容器中獲取對象
        UserDaoImpl userDao1 = context.getBean("userDao", UserDaoImpl.class);
        UserDaoImpl userDao2 = context.getBean("userDao", UserDaoImpl.class);
        System.out.println(userDao1);
        System.out.println(userDao2);
    }
}

Spring?Bean的配置與實例化怎么實現

關于“Spring Bean的配置與實例化怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

酉阳| 凤山县| 海南省| 邯郸市| 准格尔旗| 清河县| 当雄县| 凤凰县| 金华市| 福海县| 南陵县| 甘泉县| 酉阳| 巫溪县| 吉木乃县| 汉沽区| 繁昌县| 尉氏县| 普兰县| 区。| 油尖旺区| 深泽县| 左云县| 西城区| 同江市| 巴林右旗| 长子县| 长治市| 屯门区| 璧山县| 泰安市| 高阳县| 华宁县| 慈利县| 怀安县| 安龙县| 瑞安市| 崇信县| 绵阳市| 沁源县| 宁远县|