欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring實例化對象的幾種常見方式

 更新時間:2024年12月17日 09:48:45   作者:我也有魚魚蒸  
Spring框架作為一個輕量級的控制反轉(zhuǎn)容器,為開發(fā)者提供了多種對象實例化的策略,通過這些策略,開發(fā)者可以更加靈活地控制對象的生命周期和依賴關(guān)系,無論是通過XML配置、注解配置還是Java配置,Spring都能輕松地實現(xiàn)對象的實例化,本文將介紹Spring實例化對象的幾種常見方式

前言

Spring框架作為一個輕量級的控制反轉(zhuǎn)(IoC)容器,為開發(fā)者提供了多種對象實例化的策略。通過這些策略,開發(fā)者可以更加靈活地控制對象的生命周期和依賴關(guān)系。無論是通過XML配置、注解配置還是Java配置,Spring都能輕松地實現(xiàn)對象的實例化。本文將介紹Spring實例化對象的幾種常見方式。

前面的例子都是無參構(gòu)造實例化,所以這里就不再贅述。

有參構(gòu)造實例化 

先提供一個有參的構(gòu)造方法:

    public UserService(String str){
        System.out.println("有參構(gòu)造實例化對象"+str);
    }

然后在配置的xml文件使用constructor-arg添加參數(shù),value為參數(shù)的值

    <bean id="text" class="com.cc.service.UserService" >
        <constructor-arg name="str" value="hhhhhh"/>
    </bean>

注意name的值要與形參相同:

運行結(jié)果如圖:

在有多個參數(shù)的情況下,還需要使用index屬性來配置參數(shù)的值(如果name屬性都配置了也可以不用index):

    public UserService(String str,int string){
        System.out.println("有參構(gòu)造實例化對象"+str+","+string);
    }
    <bean id="text" class="com.cc.service.UserService" >
        <constructor-arg name="str" index="0" value=""/>
        <constructor-arg name="string" index="1" value="188"/>
    </bean>

工廠方式實例化對象

靜態(tài)工廠方式實例化對象

靜態(tài)工廠方式實例化對象是通過屬性factory-method來指定一個靜態(tài)方法,在該靜態(tài)方法中達到創(chuàng)建對象的目標并返回交給spring容器管理。

<bean id="user" class="com.cc.entity.User" factory-method="createObj"></bean>
public class User {
 
    public static Person createObj() {
        return new Person();
    }
}
public class Main {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext a = new ClassPathXmlApplicationContext("test.xml");
        Person user = (Person) a.getBean("user");
        System.out.println(user);
    }
}

采用靜態(tài)工廠的方式去實例化對象,只需要在bean標簽中指定一個靜態(tài)方法即可,用factory-method屬性來指定,方面名自已取,反正由idea自動幫我們創(chuàng)建好。然后我們只需要在創(chuàng)建好的靜態(tài)方法中返回一個對象就搞定了。  

實例工廠方式實例化對象

實例工廠方式與靜態(tài)工廠方式略有不同:

靜態(tài)工廠方式是一個靜態(tài)方法,它直接通過類名調(diào)用,并返回一個新的bean實例;

在xml配置文件中,使用<bean>標簽定義bean實例,用factory-method屬性指定靜態(tài)工廠方法名稱

實例工廠方式是一個非靜態(tài)方法,它需要在已經(jīng)創(chuàng)建了工廠對象的基礎(chǔ)上,通過工廠對象來調(diào)用。

factory-bean指定已經(jīng)創(chuàng)建好的工廠bean的id,再使用factory-method屬性指定工廠方法的名稱

    <bean id="user" class="com.cc.entity.User" ></bean>
    <bean id="person" class="com.cc.entity.Person" factory-bean="user" factory-method="createObj"></bean>
public class User {
    public User createObj() {
        return new User();
    }
}
public class Main {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext a = new ClassPathXmlApplicationContext("test.xml");
        Object bean = a.getBean("person");
        System.out.println(bean);
    }
}

實現(xiàn)FactoryBean方式

通過這種方式創(chuàng)建對象,需要實現(xiàn)FactoryBean接口,并且實現(xiàn)它的方法,一般只需實現(xiàn)以下兩個方法:

T getObject() : 返回創(chuàng)建的對象的實例;

Class<?> getObjectType() : 返回創(chuàng)建的對象實例的類;

然后在Spring的配置文件中,將 FactoryBean實現(xiàn)類注冊為一個Bean。

public class User implements FactoryBean<Person> {
    @Override
    public Person getObject() throws Exception {
        return new Person();
    }
 
    @Override
    public Class<?> getObjectType() {
        return Person.class;
    }
}
<bean class="com.cc.entity.User" id="user"></bean>

以上就是Spring實例化對象的幾種常見方式的詳細內(nèi)容,更多關(guān)于Spring實例化對象的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中的接口以及常見的Cloneable接口用法

    Java中的接口以及常見的Cloneable接口用法

    這篇文章主要介紹了Java中的接口以及常見的Cloneable接口用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Spring Security 構(gòu)建rest服務實現(xiàn)rememberme 記住我功能

    Spring Security 構(gòu)建rest服務實現(xiàn)rememberme 記住我功能

    這篇文章主要介紹了Spring Security 構(gòu)建rest服務實現(xiàn)rememberme 記住我功能,需要的朋友可以參考下
    2018-03-03
  • SpringBoot整合minio快速入門教程(代碼示例)

    SpringBoot整合minio快速入門教程(代碼示例)

    這篇文章主要介紹了SpringBoot整合minio快速入門實現(xiàn)文件上傳和下載的示例代碼,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • 簡單談談SpringMVC轉(zhuǎn)發(fā)和重定向的區(qū)別

    簡單談談SpringMVC轉(zhuǎn)發(fā)和重定向的區(qū)別

    下面小編就為大家?guī)硪黄唵握務凷pringMVC轉(zhuǎn)發(fā)和重定向的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Java日常練習題,每天進步一點點(4)

    Java日常練習題,每天進步一點點(4)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • SpringSecurity 測試實戰(zhàn)

    SpringSecurity 測試實戰(zhàn)

    這篇文章主要介紹了SpringSecurity 測試實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • 淺談MyBatis循環(huán)Map(高級用法)

    淺談MyBatis循環(huán)Map(高級用法)

    這篇文章主要介紹了淺談MyBatis循環(huán)Map(高級用法),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • 使用Java完成Socket文件傳輸方式

    使用Java完成Socket文件傳輸方式

    這篇文章主要介紹了使用Java完成Socket文件傳輸方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Spring注解@Import原理解析

    Spring注解@Import原理解析

    這篇文章主要為大家介紹了Spring注解@Import原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Java文件管理操作的知識點整理

    Java文件管理操作的知識點整理

    這篇文章主要為大家詳細介紹了Java中文件管理操作的一些知識點和實現(xiàn)方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-09-09

最新評論