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實現(xiàn)創(chuàng)建縮略圖、伸縮圖片比例生成的方法
這篇文章主要介紹了java實現(xiàn)創(chuàng)建縮略圖、伸縮圖片比例生成的方法,可實現(xiàn)針對圖片大小的縮放功能,是Java針對圖片操作的典型應(yīng)用,需要的朋友可以參考下2014-11-11
Swagger-boostrap-ui如何配置用戶名密碼訪問
這篇文章主要介紹了Swagger-boostrap-ui如何配置用戶名密碼訪問,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05
MyBatis完成CRUD?詳細細節(jié)內(nèi)容剖析
這篇文章主要介紹了MyBatis完成CRUD?詳細細節(jié)內(nèi)容剖析,本文通過圖文示例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧2024-05-05
Java中BigDecimal,DateFormatter?和迭代器的"陷阱"
這篇文章主要介紹了Java中BigDecimal,DateFormatter?和迭代器的"陷阱",文章圍繞主題展開詳細的內(nèi)容介紹,感興趣的小伙伴可以參考一下2022-06-06
Java實現(xiàn)WGS84/GCJ02/BD09的坐標互轉(zhuǎn)終極方案
這篇文章主要為大家詳細介紹了Java如何利用Geotools實現(xiàn)WGS84/GCJ02/BD09的坐標互轉(zhuǎn),文中的示例代碼講解詳細,需要的小伙伴可以了解下2025-09-09
SpringBoot實現(xiàn)HTTP服務(wù)監(jiān)聽的代碼示例
前后端分離項目中,在調(diào)用接口調(diào)試時候,我們可以通過cpolar內(nèi)網(wǎng)穿透將本地服務(wù)端接口模擬公共網(wǎng)絡(luò)環(huán)境遠程調(diào)用調(diào)試,本次教程我們以Java服務(wù)端接口為例,需要的朋友可以參考下2023-05-05
Java中構(gòu)造函數(shù),set/get方法和toString方法使用及注意說明
這篇文章主要介紹了Java中構(gòu)造函數(shù),set/get方法和toString方法的使用及注意說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01

