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