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

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

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

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

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

一、<bean id="xxx">:Bean的唯一標識

1. 作用

id是Spring容器中Bean的唯一標識符,用于在容器中定位和引用該Bean。例如:

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

2. 能否修改?

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

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

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通過該屬性匹配對應(yīng)的setter方法完成注入。例如:

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

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

2. 能否修改?

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

核心原因:

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

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

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

3. 特殊場景:允許修改的情況

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

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

此時配置需改為:

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

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

1. 作用

ref屬性用于指定當前Bean依賴的其他Bean的id,實現(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ī)則對照表

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

五、常見錯誤案例分析

錯誤1:id重復(fù)

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

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

錯誤2:name與屬性名不匹配

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

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

錯誤3:ref與id不匹配

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

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

通過掌握以上規(guī)則,能有效避免Spring配置中的常見錯誤,理解Bean之間的依賴關(guān)系和注入邏輯,為后續(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringCloud負載均衡實現(xiàn)定向路由詳情

    SpringCloud負載均衡實現(xiàn)定向路由詳情

    這篇文章主要介紹了SpringCloud負載均衡實現(xiàn)定向路由詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • Lombok 報錯:無法訪問 jdk.compiler 內(nèi)部類的解決方案

    Lombok 報錯:無法訪問 jdk.compiler 內(nèi)部類的解決方案

    本文分析了JDK9及以上版本中Lombok報錯"無法訪問jdk.compiler內(nèi)部類"的問題根源,并提供了4中解決方案,具有一定的參考價值,感興趣的可以了解一下
    2025-10-10
  • Java 調(diào)用Restful API接口的幾種方式(HTTPS)

    Java 調(diào)用Restful API接口的幾種方式(HTTPS)

    這篇文章主要介紹了Java 調(diào)用Restful API接口的幾種方式(HTTPS),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • 詳解java中的阻塞隊列

    詳解java中的阻塞隊列

    這篇文章主要介紹了java中的阻塞隊列的相關(guān)知識,文中代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解下
    2020-06-06
  • 啟動Burpsuite.jar包報錯問題及解決過程

    啟動Burpsuite.jar包報錯問題及解決過程

    啟動Burpsuite.jar包報錯,原因是JDK版本不兼容,解決方法是打開環(huán)境變量,修改或刪除環(huán)境變量,使其他版本的JDK不生效
    2026-03-03
  • Java+MySQL 圖書管理系統(tǒng)

    Java+MySQL 圖書管理系統(tǒng)

    這篇文章是BUFFER.pwn同學分享的基于Java與MySQL的圖書管理系統(tǒng),需要的朋友可以參考一下
    2021-04-04
  • Java 線程的生命周期完整實例分析

    Java 線程的生命周期完整實例分析

    這篇文章主要介紹了Java 線程的生命周期,結(jié)合完整實例形式分析了java線程周期相關(guān)的加鎖、釋放鎖、阻塞、同步等原理與操作技巧,需要的朋友可以參考下
    2019-10-10
  • Springboot結(jié)合Junit單元測試的實現(xiàn)

    Springboot結(jié)合Junit單元測試的實現(xiàn)

    Spring Boot框架通過整合JUnit,為開發(fā)者提供了便捷的單元測試支持,本文就來介紹Springboot結(jié)合Junit單元測試的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-03-03
  • JavaEE通過response實現(xiàn)請求重定向

    JavaEE通過response實現(xiàn)請求重定向

    這篇文章主要介紹了JavaEE通過response實現(xiàn)請求重定向的方法,非常的簡單實用,有需要的朋友可以參考下
    2014-10-10
  • Java Lombok簡介、使用、工作原理、優(yōu)缺點

    Java Lombok簡介、使用、工作原理、優(yōu)缺點

    這篇文章主要介紹了Java Lombok簡介、使用、工作原理、優(yōu)缺點的相關(guān)資料,幫助大家更好的理解和學習使用Java Lombok,感興趣的朋友可以了解下
    2021-03-03

最新評論

天柱县| 嫩江县| 犍为县| 东至县| 兴海县| 陇南市| 枣阳市| 浮山县| 麻阳| 临泉县| 黔江区| 奎屯市| 沁源县| 诸城市| 永川市| 唐山市| 兴化市| 肥西县| 信阳市| 黄石市| 保靖县| 武陟县| 霞浦县| 进贤县| 城市| 龙胜| 乐昌市| 北京市| 曲靖市| 鹤峰县| 明溪县| 侯马市| 灵宝市| 喀什市| 汉源县| 阳原县| 吴旗县| 封开县| 彭水| 瑞安市| 屯留县|