bean例項化的三種方法

lzgsea發表於2018-04-03

這篇文章總結了bean例項化方法

Spring中bean例項方法有三種

  • 使用構造方法例項化bean
  • 使用靜態工廠例項化bean
  • 使用例項工廠例項化bean

下面分別介紹這三種例項化bean方法具體操作。

在介紹在三種建立bean方法前,我們先建立一個User類,我們通過建立User物件來了解這三種例項化bean方式。

package lzgsea.bean;

public class User {
	private Integer id;
	private String name;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

使用構造方法例項化bean

在Java中我沒說使用構造方法建立bean,比較簡單,直接使用new關鍵字就可以建立了,例如我們要建立User物件,程式碼如下

User user = new User();
System.out.println(user);

在Spring中我們如何實現上面的java程式碼?

我們需要在XML中配置User的bean,程式碼如下:

<bean id="user" class="lzgsea.bean.User"></bean>

在Java程式碼使用ApplicationContext獲取user物件,程式碼如下:

ApplicationContext act = new ClassPathXmlApplicationContext("beans.xml");
User user = (User) act.getBean("user");
System.out.println(user);

注意:這裡使用的是無參構造方法建立bean,如果我們要使用有參的構造方法建立bean,首先我們要在User類中定義有參的構造方法,在XML使用constructor-arg配置bean的引數。

使用靜態工廠方法建立bean

同樣,我們先看看在java中是怎麼通過靜態工廠方法建立User物件。

package lzgsea.factory;

import lzgsea.bean.User;

public class BeanFactoryTest {
	
	public static void main(String[] args) {
		User user = BeanFactoryTest.createUser();
		System.out.println(user);
	}
	
	public static User createUser() {
		return new User();
	}
}

上面程式碼,我們可以看到BeanFactoryTest工廠類中有一個靜態工廠方法createUser,該方法用來生產User物件,上述程式碼我們用Spring如何來實現?

這裡我們需要使用bean標籤的factory-method屬性,該屬性表示bean的工程方法。

xml配置如下:

<bean id="user1" class="lzgsea.factory.BeanFactoryTest" factory-method="createUser"></bean>

使用靜態工廠方法建立bean,xml配置中class屬性指向的是工廠類的全路徑,factory-method屬性配置靜態工廠方法。

在java中我們使用ApplicationContext獲取user物件,程式碼如下:

ApplicationContext act = new ClassPathXmlApplicationContext("beans.xml");
User user = (User) act.getBean("user1");
System.out.println(user);

使用例項工廠例項化bean

使用例項工廠例項化bean和使用靜態工廠方法例項化bean有些類似,都是通過工廠類建立bean,不同在於使用例項工廠例項化bean,我們需要先例項化工廠類,通過工廠類物件呼叫方法建立我們需要的bean。他的java程式碼實現如下:

package lzgsea.factory;

import lzgsea.bean.User;

public class BeanFactory {
	
	public static void main(String[] args) {
		BeanFactory bf = new BeanFactory();
		User user = bf.createUser();
		System.out.println(user);
	}
	
	public User createUser() {
		return new User();
	}
}

上述這段程式碼在Spring中如何實現?

我們現在XML中配置BeanFactory,再通過factory-bean和factory-method屬性配置User,factory-bean表示工廠類的bean。

<!-- 工廠類bean -->
<bean id="beanFactory" class="lzgsea.factory.BeanFactory"></bean>
<!-- 我們需要生產的bean -->
<bean id="user2" factory-bean="beanFactory" factory-method="createUser"></bean>

在java中我們使用ApplicationContext獲取user物件,程式碼如下:

ApplicationContext act = new ClassPathXmlApplicationContext("beans.xml");
User user = (User) act.getBean("user2");
System.out.println(user);

相關文章