Sprng學習-Spring容器中建立物件的方式
阿新 • • 發佈:2018-12-31
前言
眾所周知,Spring的核心技術是IOC容器,利用其可以更方便的建立和管理物件之間的依賴關係,所以今天詳細講解IOC容器建立物件的主要方式來加以理解。
建立物件的3種主要方式:
- 無參構造器建立物件
- 有參構造器建立物件
- 工廠類建立物件
1.使用無參建構函式建立物件
它是最基本的物件建立方式,呼叫的是預設的無參構造器,程式碼如下
Person.java
package pojo; public class Person { private String name; private int age; public Person() { super(); System.out.println("無參構造器建立Person"); } public Person(String name, int age) { super(); this.name = name; this.age = age; System.out.println("有參構造器建立Person"); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } }
applicationContext.xml 配置如下
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 配置Person類,框架在底層使用反射的機制,執行無參構造器建立物件 --> <bean name="person" class="pojo.Person"> <property name="name" value="劉三刀"></property> <property name="age" value="20"></property> </bean> </beans>
測試:
@Test
public void test03() {
// 建立IOC容器物件
ApplicationContext ac = new ClassPathXmlApplicationContext("applicatonContext.xml");
// 獲取容器中的物件
Person person = (Person) ac.getBean("person");
System.out.println(person);
}
測試結果:
2.使用有參建構函式建立物件
呼叫Person的有參構造器,包含引數有name、age,在預設情況下執行有參構造器
<!-- 帶參建構函式建立Person類 -->
<bean name="person1" class="pojo.Person">
<!-- constructor-arg:有參構造的屬性
index:表示構造器引數的索引位置
type:引數型別
value:賦值 -->
<constructor-arg index="0" type="java.lang.String" value="劉四刀" />
<constructor-arg index="1" type="int" value="22" />
</bean>
測試結果:
在物件建立的過程中,還可以使用配置檔案中存在的物件來引入到其他物件中,通過ref來引入物件,如下所示。
<!-- ref的使用 -->
<bean name="str" class="java.lang.String">
<constructor-arg value="劉五刀" />
</bean>
<bean name="person2" class="pojo.Person">
<constructor-arg index="0" type="java.lang.String" ref="str" />
<constructor-arg index="1" type="int" value="23" />
</bean>
3.通過工廠類建立物件
工廠類分為例項工廠和靜態工廠來建立物件,先建立Factory類
// 工廠類
public class Factory {
// 例項工廠
public Person getPerson() {
return new Person("例項工廠建立物件",1);
}
// 靜態工廠,關鍵字static
public static Person getStaticPerson() {
return new Person("靜態工廠建立物件",2);
}
}
- 例項工廠配置
<!-- 建立工廠bean -->
<bean name="factory" class="pojo.Factory"></bean>
<!-- 使用Factory類的例項方法getPerson,factory-bean指定工廠類,factory-method指定方法 -->
<bean name="person3" factory-bean="factory" factory-method="getPerson"></bean>
2.靜態方法配置
<!-- 使用Factory類的靜態方法,類只會被載入,不會被例項化,class指定工廠類(與例項不同的地方),factory-method指定靜態方法(必須) -->
<bean name="person3" class="pojo.Factory" factory-method="getStaticPerson"></bean>
以上是鄙人對IOC容器建立物件的一些見解,如有紕漏,請指出。