Spring-IOC學習筆記-02基於XML建立Bean
阿新 • • 發佈:2021-05-26
基於XML建立Bean
文章目錄
4.1 基於構造方法
4.1.1 無參構造
預設的就是無參構造
Women在無參構造輸出
public Woman() {
System.out.println("無參海選女嘉賓");
}
配置bean
<bean id="lili" class="com.moon.entity.Woman">
<property name="name" value="莉莉"/>
<property name="age" value="18"/>
<property name="outLook" value="面容較好的"/>
</bean>
建立IOC
public static void main(String[] args) {
new ClassPathXmlApplicationContext("applicationContext.xml" );
}
結果
4.1.2 有引數構造
在使用有參構造器建立時,也需要同時將依賴注入。
<bean id="lili" class="com.moon.entity.Woman">
<constructor-arg name="name" value="莉莉"/>
<constructor-arg name="age" value="18"/>
<constructor-arg name="outLook" value="面容較好的"/>
</bean>
4.2 基於工廠模式
隱藏建立的細節
4.2.1 靜態工廠
java靜態工廠類
public class WomanStaticFactory {
public static Woman selectLili(){
Woman lili = new Woman();
lili.setName("莉莉");
lili.setAge(18);
lili.setOutLook("面容較好的");
return lili;
}
public static Woman selectMary(){
Woman lili = new Woman();
lili.setName("瑪麗");
lili.setAge(20);
lili.setOutLook("體態豐滿的");
return lili;
}
}
配置靜態工廠
<!-- 通過class定位到靜態工廠類,使用factory-menthod定位到方法 -->
<bean id="lili" class="com.moon.factory.WomanStaticFactory" factory-method="selectLili"/>
<bean id="mary" class="com.moon.factory.WomanStaticFactory" factory-method="selectMary"/>
4.2.2 工廠例項
java例項工廠類
public class WomanFactory {
public Woman selectLili(){
Woman lili = new Woman();
lili.setName("莉莉");
lili.setAge(18);
lili.setOutLook("面容較好的");
return lili;
}
public Woman selectMary(){
Woman lili = new Woman();
lili.setName("瑪麗");
lili.setAge(20);
lili.setOutLook("體態豐滿的");
return lili;
}
}
配置例項工廠
<!-- 添加工廠的bean(使用工廠類的無參建立) -->
<bean id="factory" class="com.moon.factory.WomanFactory"/>
<!-- 不用使用class去定位,直接用factory-bean定位到一個工廠物件,使用factory-method定位到工廠方法 -->
<bean id="lili" factory-bean="factory" factory-method="selectLili"/>
<bean id="mary" factory-bean="factory" factory-method="selectMary"/>
4.3 配置檔案書寫規範
1、
<bean/>
標籤中的id和name都是用來設定物件在IOC中標識。區別如下:
- 在 同一個配置檔案中不可以重複
- 如果在不同配置檔案中出現相同的 ID 和 Name的bean,排序在後面的bean會覆蓋前面的 bean。
- 在 同一個bean中同時配置了id和name,那麼 id為容器中的唯一標誌,而name為別名,如果配置了多個name,那麼 name全部是別名。
- 如果 這個bean只 配置了name,沒有id,那麼name為唯一標誌。如果name配置了多個,那麼第一個name是唯一標誌,剩餘的name為別名。
- 在一個bean中,name可以寫多個標誌,id只能設定唯一標誌。
2、如果沒有配置name和id的話,ioc容器會給bean設定一個預設標識,該標識是bean的class+#數字標識,數字從0開始。
com.moon.entity.Woman#0
如過根據標識去獲取類,只寫了全類名,ioc會去獲取全類名+#0的bean,也就是第一個bean。