欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Spring中Bean配置核心規(guī)則id、name、ref的用法與區(qū)別解析

 更新時(shí)間:2025年07月25日 09:57:40   作者:巴拉巴巴巴拉  
本文詳解Spring XML中Bean配置的id、name、ref屬性用法與區(qū)別,涵蓋唯一性、命名規(guī)范及依賴引用規(guī)則,分析常見(jiàn)錯(cuò)誤,幫助開(kāi)發(fā)者正確配置Bean并掌握依賴注入邏輯,為整合其他框架打下基礎(chǔ),感興趣的朋友一起看看吧

Spring中Bean配置核心規(guī)則:id、name、ref的用法與區(qū)別

在Spring框架的XML配置中,<bean>標(biāo)簽及其子標(biāo)簽<property>的配置是核心基礎(chǔ)。初學(xué)者常對(duì)id、name、ref等屬性的用法產(chǎn)生困惑,本文將系統(tǒng)講解這些屬性的作用、修改規(guī)則及配置原則,幫助開(kāi)發(fā)者快速掌握Spring Bean的配置邏輯。

一、<bean id="xxx">:Bean的唯一標(biāo)識(shí)

1. 作用

id是Spring容器中Bean的唯一標(biāo)識(shí)符,用于在容器中定位和引用該Bean。例如:

<!-- id為dataSource的數(shù)據(jù)源Bean -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"/>

2. 能否修改?

可以修改,但需遵循兩個(gè)規(guī)則:

  • 唯一性:在整個(gè)Spring容器中,id的值不能重復(fù)(包括與name屬性的值重復(fù))。
  • 命名規(guī)范:符合XML標(biāo)識(shí)符規(guī)則,不能以數(shù)字開(kāi)頭,避免包含空格、&、#等特殊字符。

3. 命名建議

雖然id可自定義,但建議根據(jù)Bean的功能命名,提高可讀性:

<!-- 數(shù)據(jù)源Bean -->
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"/>
<!-- MyBatis的SqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"/>

二、<property name="yyy">:屬性注入的"鑰匙"

1. 作用

name屬性用于指定Bean中需要注入的屬性名,Spring通過(guò)該屬性匹配對(duì)應(yīng)的setter方法完成注入。例如:

<bean id="userService" class="com.example.UserService">
    <!-- 注入userDao屬性 -->
    <property name="userDao" ref="userDao"/>
</bean>

上述配置會(huì)觸發(fā)UserService類的setUserDao(UserDao userDao)方法,完成屬性注入。

2. 能否修改?

不能隨意修改,name的值必須與目標(biāo)類中的屬性名完全一致(嚴(yán)格區(qū)分大小寫(xiě))。

核心原因:

Spring的屬性注入基于setter方法命名規(guī)范name="xxx"對(duì)應(yīng)目標(biāo)類中的setXxx()方法。例如:

  • name="dataSource" → 對(duì)應(yīng)setDataSource(DataSource dataSource)
  • name="username" → 對(duì)應(yīng)setUsername(String username)

若修改name的值(如將name="dataSource"改為name="dbSource"),而目標(biāo)類中沒(méi)有setDbSource()方法,Spring會(huì)拋出NoSuchMethodException異常。

3. 特殊場(chǎng)景:允許修改的情況

只有當(dāng)目標(biāo)類的屬性名發(fā)生變更時(shí),name才能同步修改。例如:

// 目標(biāo)類屬性名改為dbSource
public class UserService {
    private UserDao dbSource; // 屬性名是dbSource
    // setter方法同步修改
    public void setDbSource(UserDao dbSource) {
        this.dbSource = dbSource;
    }
}

此時(shí)配置需改為:

<bean id="userService" class="com.example.UserService">
    <property name="dbSource" ref="userDao"/> <!-- 與屬性名一致 -->
</bean>

三、<property ref="xxx">:依賴引用的"指針"

1. 作用

ref屬性用于指定當(dāng)前Bean依賴的其他Bean的id,實(shí)現(xiàn)Bean之間的關(guān)聯(lián)。例如:

<!-- 數(shù)據(jù)源Bean -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"/>
<!-- 依賴數(shù)據(jù)源的SqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!-- 引用id為dataSource的Bean -->
    <property name="dataSource" ref="dataSource"/>
</bean>

2. 能否修改?

可以修改,但必須與被引用Bean的id(或name)保持一致。

示例:

若數(shù)據(jù)源Bean的id改為druidDataSource,則ref需同步修改:

<!-- 數(shù)據(jù)源Bean的id改為druidDataSource -->
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"/>
<!-- ref需匹配新的id -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="druidDataSource"/> <!-- 與數(shù)據(jù)源id一致 -->
</bean>

四、核心規(guī)則對(duì)照表

配置項(xiàng)能否修改關(guān)鍵原則
<bean id="xxx">能(唯一即可)容器內(nèi)唯一,遵循XML命名規(guī)范
<property name="yyy">不能隨意修改(除非屬性名變更)必須與目標(biāo)類的屬性名、setter方法名完全一致
<property ref="xxx">能(需與被引用Bean的id一致)必須等于被引用Bean的idname,確保依賴正確引用

五、常見(jiàn)錯(cuò)誤案例分析

錯(cuò)誤1:id重復(fù)

<!-- 錯(cuò)誤:兩個(gè)Bean的id相同 -->
<bean id="userDao" class="com.example.UserDao"/>
<bean id="userDao" class="com.example.UserDaoImpl"/>

后果:Spring啟動(dòng)時(shí)拋出BeanDefinitionStoreException,提示id重復(fù)。

錯(cuò)誤2:name與屬性名不匹配

<!-- 錯(cuò)誤:name="userDao"與目標(biāo)類的屬性名userDAO不匹配(大小寫(xiě)錯(cuò)誤) -->
<bean id="userService" class="com.example.UserService">
    <property name="userDao" ref="userDao"/>
</bean>
<!-- 目標(biāo)類 -->
public class UserService {
    private UserDao userDAO; // 屬性名是userDAO(大寫(xiě)DAO)
    public void setUserDAO(UserDao userDAO) { // setter方法是setUserDAO
        this.userDAO = userDAO;
    }
}

后果:Spring找不到setUserDao()方法,拋出NoSuchMethodException

錯(cuò)誤3:ref與id不匹配

<!-- 數(shù)據(jù)源id是druidDataSource -->
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"/>
<!-- 錯(cuò)誤:ref引用了不存在的dataSource -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/> <!-- ref與id不一致 -->
</bean>

后果:Spring找不到id為dataSource的Bean,拋出NoSuchBeanDefinitionException。

通過(guò)掌握以上規(guī)則,能有效避免Spring配置中的常見(jiàn)錯(cuò)誤,理解Bean之間的依賴關(guān)系和注入邏輯,為后續(xù)學(xué)習(xí)Spring整合其他框架(如MyBatis、Spring MVC)打下基礎(chǔ)。

到此這篇關(guān)于Java Spring中Bean配置核心規(guī)則id、name、ref的用法與區(qū)別的文章就介紹到這了,更多相關(guān)spring bean id name ref用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實(shí)現(xiàn)連接kubernates集群的兩種方式詳解

    Java實(shí)現(xiàn)連接kubernates集群的兩種方式詳解

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)連接kubernates集群的兩種方式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • 解決Springboot配置excludePathPatterns不生效的問(wèn)題

    解決Springboot配置excludePathPatterns不生效的問(wèn)題

    這篇文章主要介紹了解決Springboot配置excludePathPatterns不生效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 淺談Spring中@Transactional事務(wù)回滾及示例(附源碼)

    淺談Spring中@Transactional事務(wù)回滾及示例(附源碼)

    本篇文章主要介紹了淺談Spring中@Transactional事務(wù)回滾及示例(附源碼),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • 手把手帶你入門 Spring Security的具體流程

    手把手帶你入門 Spring Security的具體流程

    這篇文章主要介紹了手把手帶你入門 Spring Security,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java線程中斷機(jī)制interrupt、isInterrupted、interrupted方法詳解

    Java線程中斷機(jī)制interrupt、isInterrupted、interrupted方法詳解

    這篇文章主要介紹了Java線程中斷機(jī)制interrupt、isInterrupted、interrupted方法詳解,一個(gè)線程不應(yīng)該由其他線程來(lái)強(qiáng)制中斷或停止,而是應(yīng)該由線程自己自行停止,所以,Thread.stop、Thread.suspend、Thread. resume都已經(jīng)被廢棄了,需要的朋友可以參考下
    2024-01-01
  • 一文搞懂Java并發(fā)AQS的共享鎖模式

    一文搞懂Java并發(fā)AQS的共享鎖模式

    這篇文章主要為大家闡述AQS另外一個(gè)重要模式,共享鎖模式。共享鎖可以由多個(gè)線程同時(shí)獲取,?比較典型的就是讀鎖,感興趣的小伙伴可以了解一下
    2022-10-10
  • 基于jQuery獲取table數(shù)據(jù)發(fā)送到后端

    基于jQuery獲取table數(shù)據(jù)發(fā)送到后端

    這篇文章主要介紹了基于jQuery獲取table數(shù)據(jù)發(fā)送到后端,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 深入了解Java ServletContext

    深入了解Java ServletContext

    這篇文章主要介紹了Java ServletContext的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • JAVA并發(fā)中VOLATILE關(guān)鍵字的神奇之處詳解

    JAVA并發(fā)中VOLATILE關(guān)鍵字的神奇之處詳解

    這篇文章主要給大家介紹了關(guān)于JAVA并發(fā)中VOLATILE關(guān)鍵字的神奇之處的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Springboot 2.x集成kafka 2.2.0的示例代碼

    Springboot 2.x集成kafka 2.2.0的示例代碼

    kafka近幾年更新非???,也可以看出kafka在企業(yè)中是用的頻率越來(lái)越高。本文主要為大家介紹了Springboot 2.x集成kafka 2.2.0的示例代碼,需要的可以參考一下
    2022-04-04

最新評(píng)論