最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring 基于XML配置 bean管理 Bean-IOC的方法

 更新時間:2025年04月21日 12:09:46   作者:whisperrr.  
這篇文章主要介紹了Spring 基于XML配置 bean管理 Bean-IOC的方法,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友參考下吧

??一. spring學(xué)習的核心內(nèi)容

  • Spring 核心學(xué)習內(nèi)容 IOC、AOP, jdbcTemplate, 聲明式事務(wù)
  • IOC: 控制反轉(zhuǎn) , 可以管理 java 對象
  • AOP : 切面編程
  • JDBCTemplate : 是 spring 提供一套訪問數(shù)據(jù)庫的技術(shù), 應(yīng)用性強,相對好理解
  • 聲明式事務(wù): 基于 ioc/aop 實現(xiàn)事務(wù)管理,

Spring 幾個重要概念

Spring 可以整合其他的框架(解讀: Spring 是管理框架的框架)
Spring 有兩個核心的概念: IOC 和 AOP
IOC [Inversion Of Control 反轉(zhuǎn)控制]

2.為什么學(xué)習spring,我們看一下傳統(tǒng)的開發(fā)模式

上圖連接到數(shù)據(jù)庫為例說明

程序員編寫程序, 在程序中讀取配置信息
創(chuàng)建對象, new Object???() // 反射方式
使用對象完成任務(wù)

而IOC 的開發(fā)模式 [EmpAction EmpService EmpDao Emp]程序<-----容器

解讀上圖
1.Spring 根據(jù)配置文件 xml/注解, 創(chuàng)建對象, 并放入到容器(ConcurrentHashMap)中,并且可以完成對象之間的依賴
2.當需要使用某個對象實例的時候, 就直接從容器中獲取即可
3.程序員可以更加關(guān)注如何使用對象完成相應(yīng)的業(yè)務(wù), (以前是 new … ==> 注解/配置方式)
4.DI—Dependency Injection 依賴注入,可以理解成是 IOC 的另外叫法.
5.Spring 最大的價值,通過配置,給程序提供需要使用的web 層[Servlet(Action/Controller)]/Service/Dao/[JavaBean/entity]對象,這個是核心價值所在,也是 ioc 的具體體現(xiàn), 實現(xiàn)解耦.

3.Debug 看一下 Spring 容器的處理機制,

Spring管理 Bean-IOC

Bean管理包括兩方面,創(chuàng)建 bean 對象和給 bean 注入屬性,Bean 配置方式也有兩種,基于 xml 文件配置方式和基于注解方式

??二. 基于 XML 配置 bean

1. 通過類型來獲取 bean

通過 spring 的 ioc 容器, 獲取一個 bean 對象

創(chuàng)建 Monster.java在 beans.xml 配置(說明前面已經(jīng)配置好了)

解讀:
1. 配置monster對象/javabean
2. 在beans中可以配置多個bean
3. bean表示就是一個java對象
4. class屬性是用于指定類的全路徑->spring底層使用反射創(chuàng)建
5. id屬性表示該java對象在spring容器中的id, 通過id可以獲取到對象
6. 用于給該對象的屬性賦值

<bean id="monster01" class="com.hspedu.spring.beans.Monster">
<property name="monsterId" value="1"/>
<property name="name" value="牛魔王"/>
<property name="skill" value="牛魔王拳"/>
</bean>

完成測試

ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");
Monster monster = ioc.getBean(Monster.class);

細節(jié)說明

按類型來獲取 bean, 要求 ioc 容器中的同一個類的 bean 只能有一個, 否則會拋出異常
NoUniqueBeanDefinitionException

這種方式的應(yīng)用場景:比如 XxxAction/Servlet/Controller, 或 XxxService 在一個線程
中只需要一個對象實例(單例)的情況說明一下: 在容器配置文件(比如 beans.xml)中給屬性賦值, 底層是通過
setter 方法完成的, 這也是為什么我們需要提供 setter 方法的原因

2. 通過構(gòu)造器配置 bean

在 spring 的 ioc 容器, 可以通過構(gòu)造器來配置 bean 對象

解讀
1. constructor-arg標簽可以指定使用構(gòu)造器的參數(shù)
2. index表示構(gòu)造器的第幾個參數(shù) 從0開始計算的
3. 除了可以通過index 還可以通過 name / type 來指定參數(shù)方式
4. 解除大家的疑惑, 類的構(gòu)造器,不能有完全相同類型和順序的構(gòu)造器,所以可以通過type來指定

<bean id="monster02" class="com.hspedu.spring.beans.Monster">
<constructor-arg value="2" index="0"/>
<constructor-arg value="蜘蛛精" index="1"/>
<constructor-arg value="吐口水" index="2"/>
</bean>

數(shù)據(jù)類型就是對應(yīng)的 Java 數(shù)據(jù)類型,按構(gòu)造器參數(shù)順序

<bean id="monster03" class="com.hspedu.spring.beans.Monster">
<constructor-arg value="3" type="java.lang.Integer"/>
<constructor-arg value="白骨精" type="java.lang.String"/>
<constructor-arg value="白骨鞭" type="java.lang.String"/>
</bean>

完成測試

ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");
Object monster02 = ioc.getBean("monster02");
Object monster03 = ioc.getBean("monster03");

通過 index 屬性來區(qū)分是第幾個參數(shù)
通過 type 屬性來區(qū)分是什么類型(按照順序)

3. 通過 p 名稱空間配置 bean

在 spring 的 ioc 容器, 可以通過 p 名稱空間來配置 bean 對象
完成步驟

在 beans.xml 配置, 增加命名空間配置xmlns:p="http://www.springframework.org/schema/p"

1.將光標放在p , 輸入alt+enter , 就會自動的添加xmlns
2.有時需要多來幾次

<bean id="monster04" class="com.hspedu.spring.beans.Monster"> 
p:monsterId="4" p:name="紅孩兒"
p:skill="吐火~"
/>

完成測試

ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");
Monster monster04 = ioc.getBean("monster04", Monster.class);

4. 引用/注入其它 bean 對象

在 spring 的 ioc 容器, 可以通過 ref 來實現(xiàn) bean 對象的相互引用

其它含義和前面一樣ref 表示 memberDAO 這個屬性將引用/指向 id = memberDAOImpl 對象

解讀
1.ref="memberDAO"表示 MemberServiceImpl對象屬性memberDAO引用的對象是id=memberDAO 的對象
2.這里就體現(xiàn)出spring容器的依賴注入
3.注意再spring容器中, 他是作為一個整體來執(zhí)行的, 即如果你引用到一個bean對象, 對你配置的順序沒有要求
4.建議還是按順序,好處是閱讀的時候,比較方便

<bean id="memberServiceImpl" class="com.hspedu.spring.service.MemberServiceImpl">
<property name="memberDAO" ref="memberDAOImpl"/>
</bean>
<bean id="memberDAOImpl" class="com.hspedu.spring.dao.MemberDAOImpl"/>

5. 引用/注入內(nèi)部 bean 對象

<bean id="memberServiceImpl02" class="com.hspedu.spring.service.MemberServiceImpl">
<property name="memberDAO">
	<bean class="com.hspedu.spring.dao.MemberDAOImpl"/>
</property>
</bean>

6. 引用/注入集合/數(shù)組類型

給 bean 對象的 list 集合賦值

<bean id="master01" class="com.hspedu.spring.beans.Master">
<property name="name" value="太上老君"/>
<property name="monsterList">
<list>
<ref bean="monster03"/>
<ref bean="monster02"/>
</list>
</property>

給 bean 對象的 map 集合賦值

<property name="monsterMap">
<map>
<entry>
<key>
<value>monsterKey01</value>
</key>
<ref bean="monster01"/>
</entry>
<entry>
<key>
<value>monsterKey02</value>
</key>
<ref bean="monster02"/>
</entry>
</map>
</property>

給 bean 對象的 properties 集合賦值 結(jié)構(gòu)k(String)-v(String)

<property name="pros">
<props>
<prop key="k1">Java 工程師</prop>
<prop key="k2">前端工程師</prop>
<prop key="k3">大數(shù)據(jù)工程師</prop>
</props>
</property>

給 bean 對象的數(shù)組屬性注入值 ,array標簽中使用 value 還是 bean , ref … 要根據(jù)你的業(yè)務(wù)決定

<property name="monsterName">
<array>
<value>銀角大王</value>
<value>金角大王</value>
</array>
</property>

給 bean 對象的 set 屬性注入值

<property name="monsterSet">
<set>
<ref bean="monster01"/>
<bean class="com.hspedu.spring.beans.Monster">
<property name="monsterId" value="10"/>
<property name="name" value="玉兔精"/>
<property name="skill" value="鉆地洞"/>
</bean>
</set>
</property>
</bean>

1.主要掌握 List/Map/Properties 三種集合的使用.
2.Properties 集合的特點

1)這個 Properties 是 Hashtable 的子類 , 是 key-value 的形式
2)key 是 string 而 value 也是 string

7. 級聯(lián)屬性賦值

spring 的 ioc 容器, 可以直接給對象屬性的屬性賦值, 即級聯(lián)屬性賦值

<bean id="emp" class="com.hspedu.spring.beans.Emp">
<property name="name" value="jack"/>
<property name="dept" ref="dept"/>
<property name="dept.name" value="Java 開發(fā)部"/>
</bean>
<bean id="dept" class="com.hspedu.spring.beans.Dept"/>

8. 通過靜態(tài)工廠獲取對象

先創(chuàng)建一個靜態(tài)工廠

public class MyStaticFactory {
private static Map<String, Monster> monsterMap;
static {
monsterMap = new HashMap<String, Monster>();
monsterMap.put("monster_01", new Monster(100, "黃袍怪", "一陽指"));
monsterMap.put("monster_02", new Monster(200, "九頭金雕", "如來神掌"));
}
public static Monster getMonster(String key) {
return monsterMap.get(key);
}
}

修改 beans.xml , 增加配置

1 通過靜態(tài)工廠獲取/配置bean
2. class 是靜態(tài)工廠類的全路徑
3. factory-method 表示是指定靜態(tài)工廠類的哪個方法返回對象
4. constructor-arg value=“monster02” value是指定要返回靜態(tài)工廠的哪個對象

<!-- 通過靜態(tài)工廠來獲取 bean 對象 -->
<bean id="my_monster" class="com.hspedu.spring.factory.MyStaticFactory"
factory-method="getMonster">
<!-- constructor-arg 標簽提供 key -->
<constructor-arg value="monster_01"/>
</bean>

通過這個靜態(tài)工廠獲取的對象是同一個

9. 通過實例工廠獲取對象

在 spring 的 ioc 容器, 可以通過實例工廠獲取 bean 對象

public class MyInstanceFactory {
private Map<String, Monster> monster_map;
//非靜態(tài)代碼塊
{
monster_map = new HashMap<String, Monster>();
monster_map.put("monster_01", new Monster(100, "猴子精", "吃人"));
monster_map.put("monster_02", new Monster(200, "九頭金雕", "如來神掌"));
}
public Monster getMonster(String key) {
return monster_map.get(key);
}
}

配置 beans.xm

1.factory-bean 指定使用哪個實例工廠對象返回bean
2. factory-method 指定使用實例工廠對象的哪個方法返回bean
3. constructor-arg value=“monster03” 指定獲取到實例工廠中的哪個monster

<bean id="myInstanceFactory" class="com.hspedu.spring.factory.MyInstanceFactory"/>
<bean id="my_monster2" factory-bean="myInstanceFactory"
factory-method="getMonster">
<constructor-arg value="monster_02"/>
</bean>

通過這個實例工廠獲取的對象是同一個,如果創(chuàng)建兩次實例工廠,再分別獲取對象就不是同一個,這是和靜態(tài)工廠的區(qū)別。

10. 通過 FactoryBean 獲取對象(重點)

public class MyFactoryBean implements FactoryBean<Monster> {
private String keyVal;
private Map<String, Monster> monster_map;
{
monster_map = new HashMap<String, Monster>();
monster_map.put("monster_01", new Monster(100, "黃袍怪", "一陽指"));
monster_map.put("monster_02", new Monster(200, "九頭金雕", "如來神掌"));
}
public void setKeyVal(String keyVal) {
this.keyVal = keyVal;
}
@Override
public Monster getObject() throws Exception {
// TODO Auto-generated method stub
return this.monster_map.get(keyVal);
}
@Override
public Class getObjectType() {
// TODO Auto-generated method stub
return Monster.class;
}
@Override
public boolean isSingleton() {
// TODO Auto-generated method stub
return true;
}
}

解讀
1.通過 FactoryBean 來獲取 bean 對象
2.name=“keyVal” 就是 MyFactoryBean 定義的 setKeyVal 方法
3.value=“monster_01” ,就是給 keyVal 的值

<bean id="myFactoryBean" class="com.hspedu.spring.factory.MyFactoryBean">
<property name="keyVal" value="monster_01"/>
</bean>

11. bean 配置信息重用(繼承)

在 spring 的 ioc 容器, 提供了一種繼承的方式來實現(xiàn) bean 配置信息的重用

<!-- 繼承的方式來實現(xiàn) bean 配置信息的重用 -->
<bean id="monster10" class="com.hspedu.spring.beans.Monster">
<property name="monsterId" value="10"/>
<property name="name" value="蜈蚣精"/>
<property name="skill" value="蜇人"/>
</bean>
<!-- parent="monster10" 就是繼承使用了 monster10 的配置信息 -->
<bean id="monster11" class="com.hspedu.spring.beans.Monster" parent="monster10"/>
<!-- 當我們把某個bean設(shè)置為 abstract="true" 這個bean只能被繼承,而不能實例化了 -->
<bean id="monster12" class="com.hspedu.spring.beans.Monster" abstract="true">
<property name="monsterId" value="12"/>
<property name="name" value="美女蛇"/>
<property name="skill" value="吃人"/>
</bean>
<!-- parent="monster12" 就是繼承使用了 monster12 的配置信息 -->
<bean id="monster13" class="com.hspedu.spring.beans.Monster" parent="monster12"/>

到此這篇關(guān)于Spring 基于XML配置 bean管理 Bean-IOC的方法的文章就介紹到這了,更多相關(guān)Spring 管理 Bean-IOC內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • struts2攔截器_動力節(jié)點Java學(xué)院整理

    struts2攔截器_動力節(jié)點Java學(xué)院整理

    如何使用struts2攔截器,或者自定義攔截器。下面通過實例代碼給大家分享struts2攔截器的相關(guān)知識,感興趣的朋友參考下吧
    2017-09-09
  • Java文件類型校驗之Apache Tika詳解

    Java文件類型校驗之Apache Tika詳解

    本文介紹了使用Apache Tika庫來判斷文件類型的方法,Tika可判斷多種文件類型,包括doc、ppt、xls等,通過引入Tika的Maven依賴,可以輕松轉(zhuǎn)換MultipartFile為File類,從而獲取文件的Mime類型,最后列出了常見文件類型的Mime類型,方便使用
    2026-03-03
  • SpringCloud客戶端報錯:- was unable to send heartbeat!的解決

    SpringCloud客戶端報錯:- was unable to send&nb

    這篇文章主要介紹了SpringCloud客戶端報錯:- was unable to send heartbeat!的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Spring整合Quartz實現(xiàn)定時任務(wù)調(diào)度的方法

    Spring整合Quartz實現(xiàn)定時任務(wù)調(diào)度的方法

    下面小編就為大家?guī)硪黄猄pring整合Quartz實現(xiàn)定時任務(wù)調(diào)度的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • 利用Maven實現(xiàn)將代碼打包成第三方公共jar包

    利用Maven實現(xiàn)將代碼打包成第三方公共jar包

    在項目開發(fā)過程中,我們經(jīng)常需要將一些公共方法提取出來,然后單獨封裝成一個第三方公共jar包,采用普通的方式打包后的jar,依賴的工程執(zhí)行編譯時,卻提示找不到對應(yīng)的依賴包,那么如何將工程打包為可執(zhí)行jar包呢?下面向大家分享三種方法
    2022-10-10
  • Java實現(xiàn)手寫自旋鎖的示例代碼

    Java實現(xiàn)手寫自旋鎖的示例代碼

    自旋鎖是專為防止多處理器并發(fā)而引入的一種鎖,它在內(nèi)核中大量應(yīng)用于中斷處理等部分。本文將用Java實現(xiàn)手寫自旋鎖,需要的可以參考一下
    2022-08-08
  • 淺析Java模板方法的一種使用方式

    淺析Java模板方法的一種使用方式

    模板方法說白了就是將一段代碼模板化,將通用的代碼段抽取出來,并提供一些自定義的接口去定制的特定位置的某些業(yè)務(wù)功能。本文主要來和大家聊聊它的一種使用方式,希望對大家有所幫助
    2023-02-02
  • java實現(xiàn)微信小程序登錄態(tài)維護的示例代碼

    java實現(xiàn)微信小程序登錄態(tài)維護的示例代碼

    本篇文章主要介紹了java實現(xiàn)微信小程序登錄態(tài)維護的示例代碼,具有一定的參考價值,有興趣的可以了解一下
    2017-09-09
  • maven依賴版本沖突如何處理

    maven依賴版本沖突如何處理

    文章主要介紹了Maven依賴版本沖突的原因以及如何處理版本沖突的方法,包括使用exclusions排除依賴和使用dependencyManagement鎖定版本號
    2025-01-01
  • SpringBoot訪問MongoDB數(shù)據(jù)庫的兩種方式

    SpringBoot訪問MongoDB數(shù)據(jù)庫的兩種方式

    MongoDB是一種非關(guān)系型數(shù)據(jù)庫,通過文檔存儲數(shù)據(jù),適用于大規(guī)模數(shù)據(jù)存儲和高并發(fā)訪問,這篇文章主要介紹了SpringBoot訪問MongoDB數(shù)據(jù)庫的兩種方式,感興趣想要詳細了解可以參考下文
    2023-05-05

最新評論

伊宁县| 河曲县| 灵山县| 比如县| 兴海县| 富裕县| 古交市| 峡江县| 阿勒泰市| 姚安县| 赤城县| 嵊泗县| 乳山市| 黔江区| 油尖旺区| 汕头市| 金川县| 简阳市| 昌宁县| 安岳县| 海丰县| 灌南县| 清苑县| 瓮安县| 古丈县| 宿州市| 贵德县| 普宁市| 垣曲县| 武山县| 奇台县| 遵义市| 达州市| 唐海县| 米易县| 武乡县| 京山县| 定边县| 敦化市| 汤阴县| 宾川县|