国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Bean 的作用域(Bean Scope)

這篇具有很好參考價(jià)值的文章主要介紹了Spring Bean 的作用域(Bean Scope)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

大家好,我是 god23bin,今天我們來(lái)聊一聊 Spring 框架中的 Bean 作用域(Scope)。

什么是 Bean 的作用域?

我們?cè)谝?XML 作為配置元數(shù)據(jù)的情況下,進(jìn)行 Bean 的定義,是這樣的:

<bean id="vehicle" class="cn.god23bin.demo.domain.model.Vehicle">
	<!-- 協(xié)作者寫(xiě)在這里... -->
</bean>

我們寫(xiě)了一個(gè) Bean 定義(Bean Definition),就是用于創(chuàng)建所定義的類(lèi)的實(shí)例的。

一個(gè) Bean 定義,我們可以類(lèi)比一個(gè)類(lèi)的定義,你定義了一個(gè)類(lèi),你可以根據(jù)這個(gè)類(lèi)創(chuàng)建出許多實(shí)例對(duì)象。同理,Bean 定義也是,也是可以根據(jù)這個(gè)定義創(chuàng)建許多實(shí)例對(duì)象的,只不過(guò)這里是 Spring 幫我們創(chuàng)建,而不是我們手動(dòng) new 。 這些 Bean 對(duì)象實(shí)例,我們可以理解為 Spring IoC 容器中的對(duì)象。

在寫(xiě) Bean 定義的過(guò)程中,我們可以控制各種 Bean 的依賴(lài)項(xiàng)和相應(yīng)的值,將這些依賴(lài)項(xiàng)和值注入到 Bean 定義所創(chuàng)建的對(duì)象中。同理,這個(gè)過(guò)程也可以控制 Bean 定義創(chuàng)建的對(duì)象的 Scope(作用域)。Bean 的作用域定義了在容器中創(chuàng)建的 Bean 實(shí)例的生命周期以及在應(yīng)用程序中的可見(jiàn)性。

6 種 Bean 的作用域

Spring 支持 6 種 Bean 的作用域,其中有 4 種是在 Web 應(yīng)用下才能感知到的,如下表所示:

Scope 說(shuō)明
singleton (默認(rèn)情況下)每個(gè) Spring IoC 容器將單個(gè) Bean 定義的 Scope 指定為單個(gè)對(duì)象實(shí)例。
prototype 將單個(gè) Bean 定義的 Scope 擴(kuò)大到任意數(shù)量的對(duì)象實(shí)例。
request 將單個(gè) Bean 定義的 Scope 擴(kuò)大到單個(gè) HTTP 請(qǐng)求的生命周期。也就是說(shuō),每個(gè) HTTP 請(qǐng)求都有自己的 Bean 實(shí)例,該實(shí)例是在單個(gè) Bean 定義的基礎(chǔ)上創(chuàng)建的。只在 Web 感知的 Spring ApplicationContext 的上下文中有效。
session 將單個(gè) Bean 定義的 Scope 擴(kuò)大到一個(gè) HTTP 會(huì)話(huà)的生命周期。只在 Web 感知的 Spring ApplicationContext 的上下文中有效。
application 將單個(gè) Bean 定義的 Scope 擴(kuò)大到 ServletContext 的生命周期中。只在 Web 感知的 Spring ApplicationContext 的上下文中有效。
websocket 將單個(gè) Bean 定義的 Scope 擴(kuò)大到 WebSocket 的生命周期。只在 Web 感知的 Spring ApplicationContext 的上下文中有效。

1. Singleton Scope

singleton 作用域的 Bean,在 Spring IoC 容器中就有且僅有一個(gè)該類(lèi)型的實(shí)例對(duì)象,也就是單例的。

默認(rèn)情況下,我們?cè)趯?xiě) Bean 定義的時(shí)候,不指定作用域的話(huà),那么這個(gè) Bean 對(duì)象就是單例的。

<!-- 不寫(xiě) Bean 的作用域,默認(rèn)作用域?yàn)閱卫?-->
<bean id="accountService" class="cn.god23bin.demo.service.DefaultAccountService"/>

<!-- 寫(xiě)上作用域,這里是冗余的寫(xiě)法,使用 scope 屬性 -->
<bean id="accountService" class="cn.god23bin.demo.service.DefaultAccountService" scope="singleton"/>

這個(gè)單例對(duì)象是存儲(chǔ)在一個(gè)緩存區(qū)域中的,在后續(xù)的請(qǐng)求或者引用中,Spring 就會(huì)返回這個(gè)緩存的對(duì)象。

實(shí)際上,Spring 中的單例的 Bean 對(duì)象是不同于 Gang of Four 設(shè)計(jì)模式中的所定義的單例模式的。

設(shè)計(jì)模式(Design Pattern)是前輩們對(duì)代碼開(kāi)發(fā)經(jīng)驗(yàn)的總結(jié),是解決特定問(wèn)題的一系列套路。它不是語(yǔ)法規(guī)定,而是一套用來(lái)提高代碼可復(fù)用性、可維護(hù)性、可讀性、穩(wěn)健性以及安全性的解決方案。

1995 年,GoF(Gang of Four,四人組/四人幫)合作出版了《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》一書(shū),共收錄了 23 種設(shè)計(jì)模式,從此樹(shù)立了軟件設(shè)計(jì)模式領(lǐng)域的里程碑,人稱(chēng)「GoF設(shè)計(jì)模式」。

設(shè)計(jì)模式中的單例模式是硬編碼的方式,以便每個(gè) ClassLoader 只創(chuàng)建一個(gè)特定類(lèi)的一個(gè)實(shí)例。

Spring 單例的范圍是指每個(gè) IoC 容器的,不同 IoC 容器維護(hù)自己的 Bean 的單例對(duì)象。

2. Prototype Scope

Bean 的作用域是 prototype,中文意思是原型,實(shí)際上這里是省略了 non-singleton,這個(gè)作用域的全稱(chēng)是 non-singleton prototype scope,即「非單例原型的作用域」。

顧名思義,這個(gè)作用域下的 Bean 不是單例的,意思就是說(shuō) Bean 是多例的,每一次的請(qǐng)求或者引用,都會(huì)創(chuàng)建一個(gè)新的 Bean 對(duì)象。

當(dāng)然這里的請(qǐng)求或者引用的意思是指,非單例原型的 Bean 被注入到另一個(gè) Bean 中的時(shí)候(Bean 作為屬性被引用),或者我們直接通過(guò)容器的 getBean() 方法調(diào)用來(lái)請(qǐng)求它的時(shí)候,就會(huì)創(chuàng)建一個(gè)新的對(duì)象。

在 XML 中指定了這個(gè) Bean 的作用域?yàn)?prototype。

<bean id="accountService" class="cn.god23bin.demo.service.DefaultAccountService" scope="prototype"/>

在 prototype 作用域下的 Bean,Spring 是不會(huì)負(fù)責(zé)該 Bean 的銷(xiāo)毀周期中回調(diào)的方法的,如果該 Bean 擁有一些重要的資源,想在該 Bean 對(duì)象銷(xiāo)毀時(shí)釋放這些資源,那么需要自定義 BeanPostProcessor(Bean 的后置處理器),它持有我們需要清理的 Bean 的引用。

在某些方面來(lái)說(shuō),在 prototype 作用域下的 Bean 的作用是代替 new 操作的。

其余 4 種作用域

request、session、applicationwebsocket scope 只有在使用 Web 感知的 Spring ApplicationContext 實(shí)現(xiàn)(如 XmlWebApplicationContext)時(shí)才可用。

簡(jiǎn)而言之,一般是在 Web 應(yīng)用下,借助 Spring 的 Web 模塊,就能使用這 4 種作用域。

如果你將這些 scope 與常規(guī)的 Spring IoC 容器(如 ClassPathXmlApplicationContext)一起使用,就會(huì)拋出一個(gè) IllegalStateException,提示有未知的 Bean scope。

3. Request Scope

<bean id="loginController" class="cn.god23bin.demo.controller.LoginController" scope="request"/>

Spring IoC 容器為每一個(gè) HTTP 請(qǐng)求使用 loginController Bean 定義來(lái)創(chuàng)建 LoginController Bean 的新實(shí)例,從而實(shí)現(xiàn)這種 request 作用域。

你可以隨心所欲地改變被創(chuàng)建的實(shí)例的內(nèi)部狀態(tài),因?yàn)閺耐粋€(gè) loginController Bean 定義中創(chuàng)建的其他實(shí)例不會(huì)看到這些狀態(tài)的變化。它們是針對(duì)單個(gè)請(qǐng)求的,當(dāng)請(qǐng)求完成處理時(shí),該請(qǐng)求所涉及的 Bean 會(huì)被丟棄。

4. Session Scope

<bean id="userPreferences" class="cn.god23bin.demo.UserPreferences" scope="session"/>

Spring IoC 容器通過(guò)使用 userPreferences Bean 定義,在單個(gè)HTTP Session 的生命周期內(nèi)創(chuàng)建一個(gè)新的 UserPreferences Bean 實(shí)例。

request scope 的 Bean 一樣,你可以隨心所欲地改變被創(chuàng)建的實(shí)例的內(nèi)部狀態(tài),要知道其他 HTTP Session 實(shí)例也在使用從同一個(gè) userPreferences Bean定義中創(chuàng)建的實(shí)例,它們不會(huì)看到這些狀態(tài)的變化,因?yàn)樗鼈兪翘囟ㄓ趩蝹€(gè)HTTP Session。當(dāng)HTTP Session 最終被丟棄時(shí),作用于該特定HTTP Session 的 Bean 也被丟棄。

5. Application Scope

<bean id="appPreferences" class="cn.god23bin.demo.AppPreferences" scope="application"/>

Spring 容器通過(guò)為整個(gè)Web應(yīng)用程序使用一次 appPreferences Bean 定義來(lái)創(chuàng)建 AppPreferences Bean的新實(shí)例。

這有點(diǎn)類(lèi)似于Spring的 singleton Bean,但在兩個(gè)重要方面有所不同。

它是每個(gè) ServletContext 的單例,而不是每個(gè) Spring ApplicationContext(在任何給定的Web應(yīng)用程序中可能有幾個(gè))。

6. WebSocket Scope

這里就涉及到 WebSocket 了,目前先不討論。后面再來(lái)填坑~

不同作用域的 Bean 之間的依賴(lài)關(guān)系

這里討論的,一般就是單例作用域的 Bean原型作用域的 Bean 之間的依賴(lài)關(guān)系。

現(xiàn)在舉個(gè)例子,假設(shè)有兩個(gè) Java 類(lèi)交給了 Spring IoC 容器管理,分別是 SingletonBean 類(lèi)和 PrototypeBean 類(lèi)。

其中 SingletonBean 是單例作用域的 Bean,而 PrototypeBean 是原型作用域的 Bean。

那么當(dāng):

  1. SingletonBean 的依賴(lài)項(xiàng)是 PrototypeBean 時(shí),PrototypeBean 對(duì)象只會(huì)初始化一次并注入到 SingletonBean,這樣 PrototypeBean 就起不到原型作用域的效果。
  2. PrototypeBean 的依賴(lài)項(xiàng)是 SingletonBean 時(shí),每次 PrototypeBean 對(duì)象都會(huì)創(chuàng)建,這些對(duì)象都依賴(lài)于一個(gè)單例對(duì)象,此時(shí)沒(méi)任何問(wèn)題。

方法注入

Spring 提供了一種稱(chēng)為方法注入(Method Injection)的機(jī)制來(lái)解決原型作用域的 Bean 在被注入到單例作用域的 Bean 中時(shí)只創(chuàng)建一個(gè)實(shí)例的問(wèn)題。

方法注入允許每次調(diào)用方法時(shí)都獲取一個(gè)新的原型作用域的 Bean 實(shí)例

方法注入是通過(guò)在 SingletonBean 中定義一個(gè)返回 PrototypeBean 實(shí)例的方法來(lái)實(shí)現(xiàn)的。這樣,在每次需要使用 PrototypeBean 的地方,可以通過(guò)調(diào)用該方法獲取一個(gè)新的實(shí)例。

以下是使用方法注入解決 Prototype Bean 作用域的示例:

public abstract class SingletonBean {
    public abstract PrototypeBean getPrototypeBean();

    public void doSomething() {
        PrototypeBean prototypeBean = getPrototypeBean();
        // 使用 Prototype Bean 進(jìn)行操作
    }
}

public class PrototypeBean {
    // Prototype Bean 的定義
}

在上述示例中,SingletonBean 是一個(gè)抽象類(lèi),其中聲明了一個(gè)抽象方法 getPrototypeBean(),該方法返回一個(gè) PrototypeBean 實(shí)例。在 doSomething() 方法中,通過(guò)調(diào)用 getPrototypeBean() 方法獲取一個(gè)新的 PrototypeBean 實(shí)例,以便在每次調(diào)用 doSomething() 時(shí)使用不同的實(shí)例。

然后,可以通過(guò)具體的子類(lèi)來(lái)實(shí)現(xiàn) SingletonBean,并實(shí)現(xiàn) getPrototypeBean() 方法以返回相應(yīng)的 PrototypeBean 實(shí)例。

通過(guò)方法注入,每次調(diào)用 doSomething() 方法時(shí)都會(huì)獲取一個(gè)新的 PrototypeBean 實(shí)例,從而解決了在 Singleton Bean 中注入 Prototype Bean 時(shí)只創(chuàng)建一個(gè)實(shí)例的問(wèn)題。

需要注意的是,方法注入需要在配置文件或使用注解時(shí)進(jìn)行特殊的配置,具體的配置方式基本如下。

1. XML 配置方式

當(dāng)然,上面舉例是一個(gè)抽象類(lèi),不是抽象類(lèi)也是可以的,比如:

public class SingletonBean {
    // 方法注入,Spring 會(huì)幫我們返回這個(gè)對(duì)象,這里寫(xiě)成 null 即可
    public PrototypeBean getPrototypeBean() {
        return null;
    }

    public void doSomething() {
        PrototypeBean prototypeBean = getPrototypeBean();
        // 使用 Prototype Bean 進(jìn)行操作
    }
}

public class PrototypeBean {
    // Prototype Bean 的定義
}

接著,單獨(dú)上面是沒(méi)有實(shí)現(xiàn)不了方法注入的,還需要結(jié)合配置元數(shù)據(jù),現(xiàn)在在 XML 配置文件中使用 <lookup-method /> 標(biāo)簽來(lái)實(shí)現(xiàn)方法注入。

<bean id="singletonBean" class="cn.god23bin.demo.domain.model.SingletonBean">
    <lookup-method name="getPrototypeBean" bean="prototypeBean"/>
</bean>

<bean id="prototypeBean" class="cn.god23bin.demo.domain.model.PrototypeBean" scope="prototype"/>

上面的配置示例中,singletonBean 是一個(gè)單例 Bean,通過(guò) <lookup-method /> 標(biāo)簽指定了一個(gè)名為 getPrototypeBean 的方法,并引用了一個(gè)原型 Bean prototypeBean。

在運(yùn)行時(shí),每次調(diào)用 getPrototypeBean 方法時(shí),都會(huì)返回一個(gè)新的 prototypeBean 實(shí)例。

2. 注解配置方式

使用 @Lookup 注解來(lái)實(shí)現(xiàn)方法注入。

@Component
public class SingletonBean {

    private PrototypeBean prototypeBean;

    @Lookup
    public PrototypeBean getPrototypeBean() {
        return null; // 實(shí)際上會(huì)由 Spring 生成具體實(shí)現(xiàn)
    }

    // 其他代碼...
}

@Component
@Scope("prototype")
public class PrototypeBean {
    // 具體的原型 Bean 實(shí)現(xiàn)
}

在上面的示例中,SingletonBean 使用了 @Lookup 注解標(biāo)記了一個(gè)名為 getPrototypeBean 的方法。在運(yùn)行時(shí),Spring 會(huì)為這個(gè)方法生成具體的實(shí)現(xiàn),以實(shí)現(xiàn)方法注入。

總結(jié)

簡(jiǎn)單總結(jié)下:

Bean 的作用域在 Bean 定義的時(shí)候可以進(jìn)行指定,默認(rèn)是單例的,多例的 Bean 就是所謂的原型作用域。

一共 6 種作用域需要熟悉,其中 4 種是在具有 Web 感知能力的 Spring IoC (應(yīng)用上下文)下才有的作用域。

對(duì)于單例 Bean 依賴(lài)原型 Bean 的問(wèn)題,可以通過(guò)方法注入解決,兩種寫(xiě)法實(shí)現(xiàn)方法注入,一種是 XML,另一種是注解的方式。

最后的最后

希望各位屏幕前的靚仔靚女們給個(gè)三連!你輕輕地點(diǎn)了個(gè)贊,那將在我的心里世界增添一顆明亮而耀眼的星!

咱們下期再見(jiàn)!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-707056.html

到了這里,關(guān)于Spring Bean 的作用域(Bean Scope)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring Bean 作用域的定義

    Spring Bean 作用域的定義

    ????????在 Spring 配置中,我們可以通過(guò) scope 屬性來(lái)定義 Spring Bean 的作用域,可以接受 5 個(gè)內(nèi)建的值,分別代表 5 種作用域類(lèi)型,下面給大家詳細(xì)總結(jié)一下: 1、singleton,用來(lái)定義一個(gè) Bean 為單例,也就是說(shuō)在 Spring loC 容器中僅有唯一 的一個(gè)實(shí)例對(duì)象,Spring 中的 Bean 默認(rèn)

    2024年02月12日
    瀏覽(21)
  • Spring中Bean的作用域和Spring生命周期

    Spring中Bean的作用域和Spring生命周期

    從前面的文章中我們看出Spring是用來(lái)存儲(chǔ)和讀取Bean的,因此Spring中Bean是最核心的資源,所以我們將對(duì)Bean進(jìn)行深入的理解。 現(xiàn)在有一個(gè)公共的Bean,提供給了兩個(gè)用戶(hù)去使用,但是在使用過(guò)程中,用戶(hù)一修改了公共的Bean數(shù)據(jù),當(dāng)用戶(hù)2在使用時(shí),卻發(fā)現(xiàn)產(chǎn)生了邏輯上的錯(cuò)誤。

    2024年02月16日
    瀏覽(25)
  • Spring | Bean 作用域和生命周期

    Spring | Bean 作用域和生命周期

    Spring 是用來(lái)讀取和存儲(chǔ) Bean,因此在 Spring 中 Bean 是最核心的操作資源,所以接下來(lái)我們深入學(xué)習(xí)?下 Bean 對(duì)象 假設(shè)現(xiàn)在有?個(gè)公共的 Bean,提供給 A 用戶(hù)和 B 用戶(hù)使用,然而在使用的途中 A 用戶(hù)卻 “悄悄” 地修改了公共 Bean 的數(shù)據(jù),導(dǎo)致 B 用戶(hù)在使用時(shí)發(fā)生了預(yù)期之外的邏

    2024年02月14日
    瀏覽(21)
  • Spring Bean作用域與生命周期

    Spring Bean作用域與生命周期

    目錄 Bean的作用域: Bean有六大行為模式 1、singleton:單例模式(默認(rèn)) 2、prototype: 原型模式(多例模式) 3、request: 請(qǐng)求作用域(Spring MVC) 4、session: 會(huì)話(huà)作用域(Spring MVC) 5、application: 全局作用域(Spring MVC) 6、websocket: HTTP WebSocket 作用域(Spring WebSocket) applicationContext和singleton的區(qū)別? Bea

    2024年02月02日
    瀏覽(25)
  • Spring(Bean 作用域和生命周期)

    Spring(Bean 作用域和生命周期)

    目錄 1. 案例1: Bean作用域的問(wèn)題 2. 作用域 3. 設(shè)置 Bean 的作用域 4. Spring 的執(zhí)行流程 5. Bean 的生命周期 現(xiàn)在有一個(gè)公共的 Bean,通過(guò)給 A 用戶(hù) 和 B 用戶(hù)使用, 然后在使用的過(guò)程中 A 偷偷的修改了公共 Bean 的數(shù)據(jù), 導(dǎo)致 B 在使用時(shí)發(fā)生了預(yù)期之外的邏輯錯(cuò)誤 (1) 公共 Bean:? ?[名稱(chēng)是

    2024年02月19日
    瀏覽(78)
  • java面試題(23):Spring Bean如何保證并發(fā)安全

    1 問(wèn)題分析 我們知道默認(rèn)情況下,Spring中的Bean是單例的,所以在多線(xiàn)程并發(fā)訪(fǎng)問(wèn)的時(shí)候,有可能會(huì)出現(xiàn)線(xiàn)程安全問(wèn)題。 2 解決方案 有幾個(gè)方面的解決思路: 我們可以設(shè)置Bean的作用域設(shè)置為原型(prototype),這樣每次從容器中獲取該 Bean 的時(shí)候,都會(huì)創(chuàng)建一個(gè)新的實(shí)例,避免

    2024年01月18日
    瀏覽(29)
  • 【Spring】Bean的作用域和生命周期

    【Spring】Bean的作用域和生命周期

    目錄 一、引入案例來(lái)探討B(tài)ean的作用域 二、Bean的作用域 2.1、Bean的6種作用域 2.2、設(shè)置Bean的作用域 三、Spring的執(zhí)行流程 ?四、Bean的聲明周期 1、生命周期演示 首先我們創(chuàng)建一個(gè)User類(lèi),定義一個(gè)用戶(hù)信息,在定義一個(gè)Users類(lèi),使用方法注解將user存入Spring中,然后兩個(gè)用戶(hù)A對(duì)這

    2024年02月14日
    瀏覽(24)
  • Spring Bean的作用域及生命周期

    Spring Bean的作用域及生命周期

    目錄 前言: Bean的作用域(Scope) 單例模式 原型模式(多例作用域) 請(qǐng)求作用域(request) 會(huì)話(huà)作用域 全局作用域 網(wǎng)絡(luò)長(zhǎng)連接 Spring執(zhí)行流程 Bean的生命周期 測(cè)試 小結(jié): ? ? 使用Spring框架時(shí),我們需要清楚Spring托管Bean的作用域和生命周期,這樣使用框架才會(huì)更加得心應(yīng)手。

    2024年02月03日
    瀏覽(22)
  • Spring Bean的作用域和生命周期

    Spring Bean的作用域和生命周期

    Bean 的作用域指的是 Bean 在 Spring 容器中的行為(Bean 實(shí)例創(chuàng)建及生命周期),它的行為是由 Spring 來(lái)管理的,可以根據(jù)具體情況選擇不同的作用域來(lái)達(dá)到性能優(yōu)化、資源利用最大化和可維護(hù)性等目的。 Bean 作用域(Scope)類(lèi)型主要有如下幾種: 其中前兩種是 Spring 核心作用域,

    2024年02月12日
    瀏覽(30)
  • Bean 作用域、生命周期和Spring執(zhí)行流程

    Bean 作用域、生命周期和Spring執(zhí)行流程

    假設(shè)現(xiàn)在有?個(gè)公共的 Bean,提供給 A ?戶(hù)和 B ?戶(hù)使?,然?在使?的途中 A ?戶(hù)卻“悄悄”地修改了公共 Bean 的數(shù)據(jù),導(dǎo)致 B ?戶(hù)在使?時(shí)發(fā)?了預(yù)期之外的邏輯錯(cuò)誤。 我們可以看到,B 用戶(hù)在使用這個(gè)Bean對(duì)象時(shí),得到的Dog是被A 用戶(hù)修改過(guò)的,這無(wú)疑會(huì)給 B 用戶(hù)帶來(lái)很

    2024年02月12日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包