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

前面的例子都是無參構造實例化,所以這里就不再贅述。
有參構造實例化
先提供一個有參的構造方法:
public UserService(String str){
System.out.println("有參構造實例化對象"+str);
}然后在配置的xml文件使用constructor-arg添加參數(shù),value為參數(shù)的值:
<bean id="text" class="com.cc.service.UserService" >
<constructor-arg name="str" value="hhhhhh"/>
</bean>注意name的值要與形參相同:

運行結果如圖:

在有多個參數(shù)的情況下,還需要使用index屬性來配置參數(shù)的值(如果name屬性都配置了也可以不用index):
public UserService(String str,int string){
System.out.println("有參構造實例化對象"+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)方法,它直接通過類名調用,并返回一個新的bean實例;
在xml配置文件中,使用<bean>標簽定義bean實例,用factory-method屬性指定靜態(tài)工廠方法名稱
實例工廠方式是一個非靜態(tài)方法,它需要在已經(jīng)創(chuàng)建了工廠對象的基礎上,通過工廠對象來調用。
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實例化對象的幾種常見方式的詳細內容,更多關于Spring實例化對象的資料請關注腳本之家其它相關文章!
相關文章
Spring Security 構建rest服務實現(xiàn)rememberme 記住我功能
這篇文章主要介紹了Spring Security 構建rest服務實現(xiàn)rememberme 記住我功能,需要的朋友可以參考下2018-03-03
簡單談談SpringMVC轉發(fā)和重定向的區(qū)別
下面小編就為大家?guī)硪黄唵握務凷pringMVC轉發(fā)和重定向的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06

