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)文章
Spring Security 構(gòu)建rest服務實現(xiàn)rememberme 記住我功能
這篇文章主要介紹了Spring Security 構(gòu)建rest服務實現(xiàn)rememberme 記住我功能,需要的朋友可以參考下2018-03-03簡單談談SpringMVC轉(zhuǎn)發(fā)和重定向的區(qū)別
下面小編就為大家?guī)硪黄唵握務凷pringMVC轉(zhuǎn)發(fā)和重定向的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06