1. 程式人生 > >Sprng學習-Spring容器中建立物件的方式

Sprng學習-Spring容器中建立物件的方式

前言

眾所周知,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);
	}
}
  1. 例項工廠配置
<!-- 建立工廠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容器建立物件的一些見解,如有紕漏,請指出。