Bean實例化的方式
- Bean實例化:
在spring裏面通過配置文件 ,來創建對象
實現實例化的三種方式:
<!-- IOC入門 -->
<bean id="user" class="cn.itclass.ioc.User"></bean>
如果User中有有參構造並且沒有無參構造,則出現異常
靜態工廠類:
public class Bean2Factory {
/**
* 靜態的方法返回bean2的對象
* @return
*/
public static Bean2 getBean2() {
return new Bean2();
}
xml文件內容:
!:factory-method="getBean2" 是工廠方法Bean2Factory中的方法
<!-- 使用靜態工廠創建對象 -->
<bean id="bean2" class="cn.itclass.ioc.Bean2Factory" factory-method="getBean2"></bean>
測試代碼:
- !出錯地方:context.getBean("bean2");是context的方法
Bean2 bean2=(Bean2) context.getBean("bean2"); //getBean是系統的
System.out.println(bean2);
bean2.add();
實例工廠創建對象
- 創建不是靜態的方法,再返回類對象
- xml寫法麻煩
實例方法:其中的方法不能用類名來調用,要創建對象調用
public class Bean3Factory {
public Bean3 getBean3() {
return new Bean3();
}
Bean標籤常用屬性
id屬性:
bean id=“user”
- 起名稱,id屬性值名稱任意命名
- id屬性值,不能包含特殊符號
- 根據id值得到配置對象
class屬性:
- 創建對象所在類的全路徑class=“cn.itclass.ioc.User”
name屬性:
功能和id屬性一樣的,id屬性值不能包含特殊符號,但是在name屬性值裏面可以包含特殊符號
如:bean name(//也可寫作id)=“user”
scope屬性
singleton:
默認值,單例(單實例) :只有一個對象
只會創建一個對象,所以user1與user的地址是一樣的。
User user=(User) context.getBean("user"); //配置文件中的id值
User user1=(User) context.getBean("user");
多實例:
prototype:
<bean id="user" class="cn.itclass.ioc.User" scope="prototype"></bean>
//user 與user1 地址不一樣