bean實例化的三種方法

這篇文章總結了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);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章