成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在 Spring中,id 和 name 命名 Bean 有什么區(qū)別?

開發(fā)
好的命名是成功的一半,在 Spring世界里,id和name就像你的左右手,關(guān)鍵是要知道什么時(shí)候用哪只!?

首先,讓我們來看下Spring XML配置方式,id和name是如何定義Bean的:

<!-- 用id定義 -->
<bean id="userService" class="com.example.UserService"/>

<!-- 用name定義 -->
<bean name="userService" class="com.example.UserService"/>

接著,我們看一個(gè)注解方式:

// 注解方式
@Service("userService")  
public class UserService {}

那么,問題來了:注解中的@Service("userService")相當(dāng)于 XML中的 id還是 name?

這篇文章,我們來聊一聊。

1. 歷史背景

在早期的Spring版本(1.x時(shí)代):

  • id屬性:必須符合 XML ID規(guī)范(不能有特殊字符,不能以數(shù)字開頭等)
  • name屬性:更靈活,可以用各種字符,還能定義多個(gè)別名

這就導(dǎo)致很多開發(fā)者因?yàn)?XML規(guī)范限制不得不使用name。

但是!在Spring 3.1之后,id屬性不再受XML ID規(guī)范約束了,現(xiàn)在它和name在靈活性上已經(jīng)平起平坐了。

2. 原理剖析

本質(zhì)相同:無論是id還是name,最終都會(huì)變成 Bean的標(biāo)識(shí)符(identifier)。

特殊之處:

  • id:一個(gè) Bean只能有一個(gè)id
  • name:可以定義多個(gè),用逗號(hào)/分號(hào)/空格分隔,相當(dāng)于給Bean起別名,
<bean name="userService,userManager,userApi" class="com.example.UserService"/>

查找順序:當(dāng)使用getBean()時(shí),Spring會(huì)先查id,再查 name

3. 如何獲取 bean?

場景1:簡單Bean定義

// 注解方式
@Service("userService")  // 這相當(dāng)于xml中的id還是name?
public class UserService {}

對于@Service("xxx")中的名稱既會(huì)作為id,也會(huì)作為 name注冊!這個(gè)也回到了我們文章開頭的問題。

場景2:需要?jiǎng)e名的情況

<bean id="mainDataSource" name="primaryDB,defaultDB" class="com.example.DataSource"/>

這時(shí)候用 name定義別名就很方便,代碼中可以根據(jù)不同場景使用不同名稱獲取同一個(gè)Bean。

場景3:帶有特殊字符的Bean名

<bean name="/api/user" class="com.yuanjava.UserController"/>

雖然現(xiàn)在 id也支持特殊字符了,但看到name="/api/user"這樣的寫法,是不是更符合咱們的直覺?

4. id和name有區(qū)別嗎?

通過上面的分析,你覺得id和name命名Bean在性能上會(huì)有差異嗎?

答案是:幾乎沒有區(qū)別!因?yàn)镾pring內(nèi)部會(huì)把它們統(tǒng)一處理成標(biāo)識(shí)符,選擇id或name不會(huì)影響應(yīng)用性能。

經(jīng)過這么多年的踩坑,我的建議是:

  • 默認(rèn)使用id:因?yàn)樗Z義化,表示唯一標(biāo)識(shí)
  • 需要?jiǎng)e名時(shí)加上name:兩者可以共存!
<bean id="userService" name="userManager,userApi" class="com.example.UserService"/>
  • 團(tuán)隊(duì)統(tǒng)一規(guī)范:比選擇哪個(gè)更重要!

5. 總結(jié)

本文,我們分析了id和name命名的歷史,區(qū)別,以及如何在應(yīng)用中使用它們:

  • 如果你的Bean需要一個(gè)明確的、唯一的標(biāo)識(shí),請用id命名Bean
  • 如果需要靈活性、多個(gè)名稱,請用name命名Bean
  • 其實(shí)在Spring的現(xiàn)代版本中,它們的差別已經(jīng)很小了,最關(guān)鍵是保持一致性

好的命名是成功的一半,在 Spring世界里,id和name就像你的左右手,關(guān)鍵是要知道什么時(shí)候用哪只!

責(zé)任編輯:趙寧寧 來源: 猿java
相關(guān)推薦

2021-03-27 10:56:17

promisethenfinally

2025-03-10 09:30:00

SpringJava開發(fā)

2022-08-31 08:33:54

Bash操作系統(tǒng)Linux

2022-09-02 09:02:44

TypeInterface

2021-05-16 14:26:08

RPAIPACIO

2024-05-27 00:40:00

2021-12-17 14:40:02

while(1)for(;;)語言

2022-08-02 08:23:37

SessionCookies

2024-09-09 13:10:14

2022-02-27 15:33:22

安全CASBSASE

2024-03-05 18:59:59

前端開發(fā)localhost

2022-09-07 18:32:57

并發(fā)編程線程

2020-03-09 20:56:19

LoRaLoRaWAN無線技術(shù)

2020-11-09 14:07:53

PyQtQt編程

2022-06-06 14:53:02

LoRaLoRaWAN

2022-09-08 18:38:26

LinuxWindowsmacOS

2025-04-27 08:15:00

FlinkSavepointCheckpoint

2020-08-02 23:20:36

JavaScriptmap()forEach()

2011-06-01 11:23:15

HTML

2023-12-15 09:21:17

ObjectJavaString
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美精品中文字幕久久二区 | 国产欧美一区二区三区在线播放 | 精品久久久久久国产 | 日韩成人在线观看 | 久久久久久91 | 91久久精品国产 | 欧美专区在线观看 | 亚洲欧美视频一区 | 国产成人精品免费视频 | 国产激情小视频 | 91久久精品国产 | 国产在线不卡 | 91精品一区| 日韩在线免费观看视频 | 亚洲色视频 | 91精品国产乱码久久久 | 久久一区二区三区四区 | 午夜免费网 | 欧美精品网| 日韩一区二区三区视频 | 国产成人叼嘿视频在线观看 | japanhdxxxx裸体| 99国产精品久久久久久久 | 精品毛片在线观看 | 久久精品久久精品久久精品 | 久久精品福利 | 成人国内精品久久久久一区 | 久久一热 | 色影视| 电影91久久久 | 久久久青草婷婷精品综合日韩 | 久久久久91| www.成人免费视频 | 国产欧美二区 | 国产免费一区二区 | 日韩三级 | 亚洲精品乱码8久久久久久日本 | 福利网站在线观看 | 亚洲色图插插插 | 国产欧美在线视频 | 综合二区 |