Spring通過配置文件進行bean管理(IOC)

一、bean的作用域

在Spring容器中是指其創建的Bean對象相對於其他Bean對象的請求可見範圍,語法格式:

<bean id="" class="" scope="作用域"/>
屬性值 作用
singleton(默認值) 單例, 在Spring IoC容器中僅存在一個Bean實例(默認缺省就是scope)
prototype prototype: 多例, 每次從容器中調用Bean時,都返回一個新的實例,每次調用getBean()時,相當於執行 new XxxBean(), 不會在容器啓動時創建對象.
request Web環境下,對象與request生命週期一致
session Web環境下,對象與session生命週期一致
application Web環境下,對象與application生命週期一致

總結:絕大多數情況下,使用單例singleton(默認值),極少數情況使用多例,至於request,session因爲jsp技術的淘汰,幾乎很少使用。

二、bean的生命週期(瞭解)

  • 初始化

    配置一個方法作爲生命週期初始化方法,spring會在對象創建之後立刻調用 init-method,對應註解爲@PostConstruct

  • 銷燬

    配置一個方法作爲生命週期的銷燬方法,spring容器在關閉並銷燬所有容器中的對象之前調用destory-method,對應註解爲@PreDestory

<bean id="" class="" init-method="該類初始化方法名" destroy-method="該類銷燬方法名"/>                   

bean的生命週期: bean從出生–>銷燬的整個過程

  1. 啓動Spring容器
  2. 創建Bean對象 ----> 實際是在調用Bean對象的構造器
  3. 給Bean添加屬性
  4. 調用Bean對象的初始化init-method
  5. getBean獲取某個bean對象,調用bean對象的某一個方法
  6. 調用Bean對象的銷燬方法destory-method
  7. Spring容器銷燬

三、spring三種對象的創建方式

1、無參構造器實例化(使用最多且最重要)

// 類
public class Cat1 {
    public Cat1(){
        System.out.println("構建Cat1");
    }
}

// createBean.xml
<!--1、構造器實例化(無參構造器),使用最多-->
<bean id="cat1" class="com.sunny.Cat1"/>

2、靜態工廠方法創建(瞭解)

// 類
public class Cat2 {
}
// Cat2工廠
public class Cat2Factory {
    public static Cat2 createInstance(){
        Cat2 cat2 = new Cat2();
        return cat2;
    }
}

// createBean.xml
<!--2、靜態工廠方法實例化(瞭解)
        以前使用靜態工廠方法: Cat2 cat2 = Cat2Factory.createInstance();來創建,
        現在只不過把這種方式,設置到配置文件中來了
-->
<bean id="cat2" class="com.sunny.createbean._02_static_factory.Cat2Factory"
        factory-method="createInstance"/>

3、實例工廠方法實例化(瞭解)

// 類
public class Cat3 {
}
// Cat3工廠
public class Cat3Factory {

    public Cat3 createInstance(){
        Cat3 cat3 = new Cat3();
        return cat3;
    }
}

// createBean.xml
<!--3、實例工廠方法實例化(瞭解)
        第一個bean是創建實例工廠對象,第二個bean是通過實例工廠對象調用工廠方法創建Cat3的對象
-->
<bean id="cat3Factory" class="com.sunny.createbean._03_instance_factory.Cat3Factory"/>
<bean id="cat3" factory-bean="cat3Factory" factory-method="createInstance"/>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章