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);