1. 程式人生 > >spring中的ref和idref注入的區別

spring中的ref和idref注入的區別

ref屬性和idref屬性都是可以用在constructor-arg元素和property元素中注入的。但是它們之間的注入還是有點區別的。

例如一下的程式碼:

 <bean id="bean1" class="java.lang.String">
        <constructor-arg index="0" value="test"/>
 </bean>
    
 <bean id="idRefBean1" class="com.cui.tch.chapter3.IdRefBean">
        <property name="id"><idref bean="bean1"/></property>
 </bean>

實際上,idref注入的只是目標bean的id,而不是目標bean的例項,同時使用idref容器在部署的時候還會驗證這個名稱是否存在。

其實idref就跟value一樣,只是將某個字串注入到屬性或者建構函式中,只不過注入的是某個bean定義的id屬性值。

所以上面的程式碼的實際如下程式碼相同:

<bean id="bean1" class="java.lang.String">
        <constructor-arg index="0" value="test"/>
 </bean>
    
 <bean id="idRefBean1" class="com.cui.tch.chapter3.IdRefBean">
        <property name="id"><value>bean1</value></property>
 </bean>

但是ref則不同,ref元素是將目標bean定義的例項注入到屬性或者建構函式中,ref元素有三個屬性,區別如下:

1、local 只能指定與當前配置的Bean在同一個配置檔案中的Bean定義的名稱;

2、parent 只能指定位於當前容器的父容器中定義的物件引用;

3、bean 基本上通吃,即包括以上兩種情況都可以,所以,通吃情況下,直接使用bean來指定物件引用就可以了。 所以,上面那段配置程式碼中,beanID這個Bean中建構函式的引數name注入的只是“bea”這個字串;而其id屬性注入的則是testString這個字串。

相關推薦

Spring框架 ref idref區別

Spring是一個開放原始碼的設計層面框架,他解決的是業務邏輯層和其他各層的鬆耦合問題,因此它將面向介面的程式設計思想貫穿整個系統應用。 idref元素用來將容器內其它bean的id傳給<constructor-arg/> 或 <property/>元

springrefidref注入區別

ref屬性和idref屬性都是可以用在constructor-arg元素和property元素中注入的。但是它們之間的注入還是有點區別的。 例如一下的程式碼: <bean id="bean1" class="java.lang.String">

SpringAwareCapable的區別作用

Aware XXXAware在Spring裡表示對XXX可以感知,通俗點解釋就是:如果在某個類裡邊想要使用spring的一些東西,就可以通過實現XXXAware介面告訴Spring, Spring看到後就會給你送過來,而接收的方式是通過實現介面唯一的方法setXXX。 栗子: 比如一個類需要使用當前

C#refout的區別

C#中的ref和out提供了值型別按引用進行傳遞的解決方案,當然引用型別也可以用ref和out修飾,但這樣已經失去了意義。因為引用資料型別本來就是傳遞的引用本身而非值的拷貝。ref和out關鍵字將告訴編譯器,現在傳遞的是引數的地址而不是引數本身,這和引用型別預設的傳遞方式是一樣的。 ref和

Spring@Autowired@Resource的區別

兩者都是Spring中注入Bean的一種方式。 其實@Resource並不是Spring的註解,它的包是javax.annotation.Resource,需要匯入,但是Spring支援該註解的注入。 共同點 兩者都可以寫在欄位和setter方法上。(寫在欄位上就不用再寫setter

Spring@Controller@RestController的區別

@Controller和@RestController的共同之處: 都是用來獲取使用者發出的http請求 @Controller和@RestController的不同之處: @Restcontroller是@Controller和@ResponseBody的結合體 1、如果只使

springBeanFactoryFactoryBean的區別

區別:BeanFactory是個Factory,也就是IOC容器或物件工廠,FactoryBean是個Bean。在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)來進行

spring prototype reqeust的區別

我們知道,spring有singleton和prototype作用域,而且從spring2.0開始,又增加了三種作用域,request、session、global session。session、global session的作用域是HTTP session和全域性session。對於request和pro

springrefidref標籤之間的區別

ref和idref標籤在定義上的區別: idref標籤:注入的是目標bean的id,同時使用idref容器在部署的時候還會驗證這個名稱的bean是否真實存在。idref就跟value一樣,只是將某個字串注入到屬性或者建構函式中,只不過注入的是某個Bean定義的id屬性值。

Springrefdepends-on區別

參考:http://yanln.iteye.com/blog/2210723 這兩者都是表示對其他bean的依賴,但是ref常用的情況是這個bean作為當前bean的屬性,比如: <bean id="a" class="ClassA"/> &

spring Boot】Spring@Controller@RestController之間的區別

處理 public 不同 esp 舉例 rest control tro adding spring Boot入手的第一天,看到例子中的@RestController ............. 相同點:都是用來表示Spring某個類的是否可以接收HTTP請求 不同點:@C

Spring DriverManagerDataSource SimpleDriverDataSource 區別

DriverManagerDataSource 和 SimpleDriverDataSource 在每次請求時返回一個新建的連結, <<Spring 實戰>>中說"SimpleDriverDataSource 直接使用jdbc 驅動解決特定環境下類載入問題" . "JDBC

SpringInterceptorFilter區別

本質區別 Interceptor:基於Java的反射機制 filter:基於函式回撥。 從靈活性上說攔截器功能更強大些,Filter能做的事情,Interceptor都能做,而且可以在請求前,請求後執行,比較靈活。 其他區別   f

@param spring@parammybatis@param使用區別

spring中@param和mybatis中@param使用區別 置頂 2015年03月14日 11:51:09 閱讀數:55176 spring中@param /** * 查詢指定使用者和

SpringBean配置注入詳解

1 bean與spring容器的關係 Bean配置資訊定義了Bean的實現及依賴關係,Spring容器根據各種形式的Bean配置資訊在容器內部建立Bean定義登錄檔,然後根據登錄檔載入、例項化Bean,並建立Bean和Bean的依賴關係,最後將這些準備就緒的Bean放到

SpringBeanFactoryApplicationContext的生命週期及其區別詳解

Bean的生命週期 在很多技術中,都有生命週期這個概念,如在Android中,有Activity、Fragment等的生命週期;在Web容器中,有Servlet的生命週期。想要成為高階開發者,就必須要深入理解其生命週期。同樣的,在Spring容器中的Bean也

Spring註解autowiredresource的區別

1、@Autowired與@Resource都可以用來裝配bean. 都可以寫在欄位上,或寫在setter方法上。 2、@Autowired預設按型別裝配(這個註解是屬業spring的),預設情況下必須要求依賴物件必須存在,如果要允許null 值,可以設定它的required屬性為false,如:@Auto

SPRINGvalueref的簡寫形式

property常規寫法: <property name="myProperty">        <value>hello</value>  </property>  <constructor-arg>     <value>h

Spring@Controller@RestController之間的區別

1. Controller, RestController的共同點      都是用來表示Spring某個類的是否可以接收HTTP請求 2.  Controller, RestController的不同點      @Controller標識一個Spring類是Spring

JavaSpring,SpringBufferSpringBuilder的區別

1.StringString物件是不可變的。String類中每一個看起來會修改String值的方法(如upcase等),實際上都是建立了一個全新的String物件,以包含修改後的字串內容,而最初的String物件絲毫未動。特殊點注意!用於String的“+”和“+=”是Jav