在Spring中有三種實例化Bean的方式,但是在實際中使用最多的是第一種,其他兩種幾乎不使用。
- 實體bean,下面我們所說的都是基于這個實體Bean來介紹的。
package com.sfox.bean;
public class UserBean {
public UserBean(){
System.out.println("UserBean.......");
}
public void add(String flg){
System.out.println("add......." + flg);
}
}
1.使用類的無參構造創建
使用這種方式,實體bean的構造函數不可以有參數。
使用這種方式在beans.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">
<bean id="userBean" class="com.sfox.bean.UserBean"/>
</beans>
2.使用靜態工廠方法
- 創建靜態工廠類
import com.sfox.bean.UserBean;
public class StaticBeanFactory {
public static UserBean newUserBean(){
return new UserBean();
}
}
- 在beans.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">
<!-- 靜態工廠創建Bean -->
<bean id="staticBeanFactory" class="com.sfox.factory.StaticBeanFactory" factory-method="newUserBean"></bean>
</beans>
觀察上面配置文件,factory-method="newUserBean"
這個屬性值和靜態工廠類中的靜態方法相對應。
3.實例工廠創建
- 創建實例工廠類
package com.sfox.factory;
import com.sfox.bean.UserBean;
public class BeanFactory {
public UserBean newUserBean(){
return new UserBean();
}
}
- 在beans.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">
<!-- 普通工廠創建bean -->
<bean id="beanFactory" class="com.sfox.factory.BeanFactory"></bean>
<bean id="newBean" factory-bean="beanFactory" factory-method="newUserBean"></bean>
</beans>
我們注意這兩個bean的配置,第一個bean的id和第二個bean的factory-bean="beanFactory"
,第二個bean中的 factory-method="newUserBean"
中屬性和實體中的newUserBean 方法相對應。
bean 標簽的常用屬性
- id 屬性:起的名稱,id屬性值名稱可以任意命名。
- id 的屬性值,不能包含特殊符號
- 根據id值得到配置對象
- class 屬性:創建對象所在類的全路徑
- name 屬性:功能和id屬性一樣的,id屬性值不能包含特殊符號,但是在name屬性值里面可以包含特殊符號,在項目中很少用。
- scope 屬性
- singleton : 默認值,單例的
- prototype : 多例的
- request : WEB 項目中,Spring 創建一個Bean 的對象,將對象存入到request 域中。
- session :WEB 項目中,Spring 創建一個Bean 的對象,將對象存入到 session 域中。
- globalSession :WEB 項目中,應用在 Porlet 環境,如果沒有 Porleet 環境那么 globalSession 相當于 session。