spring中的bean標簽詳解
1、作用
用於配置對象讓spring來創建的,默認情況下它調用的是類中的無參構造函數,如果沒有無參構造函數則不能創建成功。
2、屬性
- id:給對象在容器中提供一個唯一標識。用於獲取對象。
- class:指定類的全限定類名。用於反射創建對象。默認情況下調用無參構造函數。
- scope:指定對象的作用范圍。
- singleton:默認值,單例的
- prototype:多例的
- request:WEB項目中,Spring創建一個Bean的對象,將對象存入到request域中
- session:WEB項目中,Spring創建一個Bean的對象,將對象存入到session域中
- globalSession:WEB項目中,應用在Portlet環境.如果沒有Portlet環境那么globalSession相當於session
- init-method:指定類中的初始化方法名稱
- destroy-method:指定類中銷毀方法名稱
3、bean的作用范圍和生命周期
- 單例對象:scope="singleton":一個應用只有一個對象的實例。它的作用范圍就是整個引用。
- 生命周期
- 對象出生:當應用加載,創建容器時,對象就被創建了。
- 對象活着:只要容器在,對象一直活着。
- 對象死亡:當應用卸載,銷毀容器時,對象就被銷毀了。
- 生命周期
- 多例對象:scope="prototype":每次訪問對象時,都會重新創建對象實例。
- 生命周期
- 對象出生:當使用對象時,創建新的對象實例。
- 對象活着:只要對象在使用中,就一直活着。
- 對象死亡:當對象長時間不用時,被java的垃圾回收器回收了。
- 生命周期
4、實例化bean的三種方式
4.1、方式一
<!--在默認情況下:它會根據默認無參構造函數來創建類對象。如果bean中沒有默認無參構造函數,將會創建失敗-->
<bean id="customerService" class="com.itheima.service.impl.CustomerServiceImpl"/>
4.2、方式二
/**
* 模擬一個靜態工廠,創建業務層實現類
*/
public class StaticFactory {
public static ICustomerService createCustomerService(){
return new CustomerServiceImpl();
}
}
<!-- 此種方式是:
使用StaticFactory類中的靜態方法createCustomerService創建對象,並存入spring容器
id屬性:指定bean的id,用於從容器中獲取
class屬性:指定靜態工廠的全限定類名
factory-method屬性:指定生產對象的靜態方法
-->
<bean id="customerService"
class="com.itheima.factory.StaticFactory"
factory-method="createCustomerService"></bean>
4.3、方式三
/**
* 模擬一個實例工廠,創建業務層實現類
* 此工廠創建對象,必須現有工廠實例對象,再調用方法
*/
public class InstanceFactory {
public ICustomerService createCustomerService(){
return new CustomerServiceImpl();
}
}
<!-- 此種方式是:
先把工廠的創建交給spring來管理。
然后在使用工廠的bean來調用里面的方法
factory-bean屬性:用於指定實例工廠bean的id。
factory-method屬性:用於指定實例工廠中創建對象的方法。
-->
<bean id="instancFactory" class="com.itheima.factory.InstanceFactory"></bean>
<bean id="customerService"
factory-bean="instancFactory"
factory-method="createCustomerService"></bean>