Spring_3 三種實例化bean的方式

在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。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容