首頁 >Java >java教程 >Spring創建物件的方式詳解

Spring創建物件的方式詳解

零下一度
零下一度原創
2017-07-21 22:09:022357瀏覽

關於Spring的搭建可參見:淺析Spring框架的搭建. 在測試之前還是應該先將環境配置好,將相關Jar包導進來。 Spring建立的對象,預設都是單例模式,除非透過scope指定。

一、透過建構函式建立物件。

2.1 利用無參構造函數+setter方法注入值

最基本的物件建立方式,只需要有一個無參構造函數(類別中沒有寫任何的建構函數,預設就是有一個建構函數,如果寫了任何一個建構函數,預設的無參構造函數就不會自動建立哦!!)和欄位的setter方法。

Person類別:

Spring創建物件的方式詳解
package com.mc.base.learn.spring.bean;public class Person {private String name;private Integer id;    public String getName() {return name;
    }public void setName(String name) {this.name = name;
    }public Integer getId() {return id;
    }public void setId(Integer id) {this.id = id;
    }

    @Overridepublic String toString() {return "Person [name=" + name + ", id=" + id + "]";
    }

}
Spring創建物件的方式詳解

XML配置:

Spring創建物件的方式詳解
<?xml  version="1.0" encoding="UTF-8"?><beans><bean><property></property><property></property></bean>    
</beans>
Spring創建物件的方式詳解
##其本質為:

SpringContext利用無參的建構子建立一個對象,然後利用setter方法賦值。所以如果無參構造函數不存在,Spring上下文創建物件的時候便會報錯。

Spring創建物件的方式詳解
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'person' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; 
nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.mc.base.learn.spring.bean.Person]: No default constructor found; 
nested exception is java.lang.NoSuchMethodException: com.mc.base.learn.spring.bean.Person.
Spring創建物件的方式詳解
#2.2 利用有參構造函數直接注入

Person類別:

Spring創建物件的方式詳解#
package com.mc.base.learn.spring.bean;public class Person {private String name;private Integer id;    public Person(String name, Integer id) {super();this.name = name;this.id = id;
    }public String getName() {return name;
    }public void setName(String name) {this.name = name;
    }public Integer getId() {return id;
    }public void setId(Integer id) {this.id = id;
    }

    @Overridepublic String toString() {return "Person [name=" + name + ", id=" + id + "]";
    }

}
Spring創建物件的方式詳解
XML設定:

Spring創建物件的方式詳解
<?xml  version="1.0" encoding="UTF-8"?><beans><bean><constructor-arg></constructor-arg><constructor-arg></constructor-arg></bean>    
</beans>
Spring創建物件的方式詳解
二、透過靜態工廠方式創建物件。

 靜態工廠的對象,在容器載入的時候就被創建了。

Spring創建物件的方式詳解
package com.mc.base.learn.spring.factory;import com.mc.base.learn.spring.bean.Person;public class PersonStaticFactory {    public static Person createPerson(){return new Person();
    }    /** * 工厂方法带有参数如何处理?
     * @Title: createPerson 
     * @Description: TODO(这里用一句话描述这个方法的作用) 
     * @param  @param id
     * @param  @param name
     * @param  @return 
     * @return Person    返回类型 
     * @throws     */public static Person createPerson(Integer id,String name){return new Person(name,id);
    }
}
Spring創建物件的方式詳解
    <span style="color: #008000;"><!--<span style="color: #008000;">静态的工厂方法核心是class+factory-method <span style="color: #008000;">--><span style="color: #0000ff;"><span style="color: #800000;"><span style="color: #ff0000;"><span style="color: #0000ff;"><span style="color: #ff0000;"><span style="color: #0000ff;"><span style="color: #ff0000;"><span style="color: #0000ff;"><span style="color: #0000ff;"><span style="color: #800000;"><span style="color: #0000ff;"><br>    <span style="color: #008000;"><span style="color: #008000;"><span style="color: #008000;"> <span style="color: #0000ff;">bean <span style="color: #ff0000;">id<span style="color: #0000ff;">="person"<span style="color: #ff0000;"> class<span style="color: #0000ff;">="com.mc.base.learn.spring.factory.PersonStaticFactory"<span style="color: #ff0000;"> factory-method<span style="color: #0000ff;">="createPerson"<span style="color: #0000ff;">><br><span style="color: #008000;"><!--<span style="color: #008000;">通过property方法向createPerson传递参数 <span style="color: #008000;">--></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br>        <property name="name" value="LiuChunfu"></property><br>        <property name="id" value="125"></property><br>    <br></span></span></span></span></span></span></span></span></span>
測試如下:

    @Testpublic void testName() throws Exception {
        ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
        Person person=ac.getBean("person3", Person.class);
        System.out.println(person);//Person [name=LiuChunfu, id=125]}
三、透過實例工廠方式建立物件。

實例工廠,就是透過實例來呼叫對象,但所得到的對象最終也是單利模式。實例工廠和靜態工廠創建的物件都是單例模式,兩者的差異就是創建物件的實際不同,靜態工廠是在創建容器的時候就創建了,實例工廠是在調用方法的時候才創建。知道Java設計模式中的單例模式設計(餓漢式和懶漢式)的讀者,對這裡的靜態工廠模式和實例工廠模式肯定有所體會。

Spring創建物件的方式詳解
package com.mc.base.learn.spring.factory;import com.mc.base.learn.spring.bean.Person;public class PersonFactory {public Person createInstance() {return new Person();
    }
}
Spring創建物件的方式詳解
    <bean></bean><bean><property></property><property></property></bean>

########
    @Testpublic void testName() throws Exception {
        ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
        Person person=ac.getBean("person4",Person.class);
        System.out.println(person);//Person [name=LiuChunfu, id=125]}
###### rrreee######當然上面的創建物件傳遞參數,除了能夠在創建物件的時候透過傳入預設的參數,也可以在後面透過setter方法進行傳參。 ###

以上是Spring創建物件的方式詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn