天天看點

Spring中建立Bean對象的方式及Bean的作用範圍

建立Bean對象的三種方式

    • 預設構造方法建立
    • 執行個體工廠建立
    • 靜态工廠建立
    • Bean的作用範圍

預設構造方法建立

預設的建立Bean的方式是構造方法建立,如果沒有構造方法将無法建立我們隻需在配置檔案中配置如下,跟上一章springIoc入門案例配置相同。還以儲存使用者為例。

  • bean.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和class屬性後,沒有配置其他的屬性和标簽時,采用的就是
    預設構造方法建立執行個體,如果沒有預設構造函數無法建立執行個體。
    -->
    <bean id="userService" class="com.zy.service.impl.UserServiceImpl"></bean>
</beans>
           
  • 測試類:
public class IocTest {
    public static void main(String[] args) {
        //加載配置檔案
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        //根據bean标簽的id擷取執行個體對象
        UserService userService = (UserService) context.getBean("userService");
        //調用方法
        userService.saveUser();
    }
}
           
  • 運作結果:
    Spring中建立Bean對象的方式及Bean的作用範圍

執行個體工廠建立

通過執行個體工廠來建立,我們先factory包下編寫一個工廠類InstanceFactory ,寫一個傳回值為UserServiceImpl的createUserService()方法

  • 執行個體工廠
public class InstanceFactory {
    //模拟執行個體工廠建立對象
    public UserService createUserService() {
        System.out.println("--- 通過執行個體工廠建立對象 ---");
        return new UserServiceImpl();
    }
}
           
  • bean.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标簽執行個體化工廠類,在通過factory-bean屬性引用執行個體化的工廠
       factory-method屬性配置工廠類中的方法
    -->
	<bean id="instanceFactory" class="org.example.factory.InstanceFactory"/>
	<bean id="createUserService" factory-bean="instanceFactory" factory-method="createUserService"/>
</beans>
           

靜态工廠建立

通過靜态工廠來建立,我們先在factory包下編寫一個名為staticFactory 工廠類,寫一個傳回值為UserServiceImpl的createUserService()方法并添加static關鍵字修飾。

  • 靜态工廠類
public class StaticFactory {

    //模拟靜态工廠建立對象
    public static UserService createUserService(){
        System.out.println("--- 通過靜态工廠建立對象 ---");
        return  new UserServiceImpl();
    }
}
           
  • bean.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="staticFactory" class="org.example.factory.StaticFactory" factory-method="createUserService"/>
</beans>
           

Bean的作用範圍

通過xml方式交給spring容器建立對象時,也是可以指定Bean的作用範圍,通過scope=""來設定,預設是單例模式

範圍 作用描述
singleton Spring中預設的作用範圍是一個單例的模式,IOC容器中隻會有一個bean定義的執行個體
prototype 多例的,每次調用getBean()方法擷取bean标簽的作用範圍為prototype時,都會産生新的執行個體
request 應用在web項目中,Spring建立這個類以後,将這個類存入到request範圍中
session 應用在web項目中,Spring建立這個類以後,将這個類存入到session範圍中
globalsession 應用在web項目中,必須在porlet環境下使用。但是如果沒有這種環境,相對于session

單例模式(預設的模式):

原型模式(多例的):