一起來讀官方文檔—–SpringIOC(04)

  • 2020 年 9 月 14 日
  • 筆記
1.4.2。依賴性和詳細配置

如上一節所述,您可以將bean屬性和構造函數參數定義為對其他託管bean(協作者)的引用或內聯定義的值。Spring的基於XML的配置元數據為此目的在其元素中支持子元素類型。

直值(原語,字符串等)
在value所述的屬性元素指定屬性或構造器參數的人類可讀的字符串表示。Spring的 轉換服務用於將這些值從轉換String為屬性或參數的實際類型。以下示例顯示了設置的各種值:

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <!-- results in a setDriverClassName(String) call -->
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
    <property name="username" value="root"/>
    <property name="password" value="misterkaoli"/>
</bean>

<beans xmlns="//www.springframework.org/schema/beans"
    xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
    xmlns:p="//www.springframework.org/schema/p"
    xsi:schemaLocation="//www.springframework.org/schema/beans
    //www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close"
        p:driverClassName="com.mysql.jdbc.Driver"
        p:url="jdbc:mysql://localhost:3306/mydb"
        p:username="root"
        p:password="misterkaoli"/>

</beans>

前面的XML更簡潔。但是,拼寫錯誤是在運行時而不是設計時發現的,除非您使用IDE(例如IntelliJ IDEA或用於Eclipse的Spring工具)在創建bean定義時支持自動屬性完成。

您還可以配置java.util.Properties實例,如下所示:

<bean id="mappings"
    class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    <property name="properties">
        <value>
            jdbc.driver.className=com.mysql.jdbc.Driver
            jdbc.url=jdbc:mysql://localhost:3306/mydb
        </value>
    </property>
</bean>

Spring容器將元素中的文本轉換為java.util。屬性實例,通過使用JavaBeans的PropertyEditor機制。這是一個很好的快捷方式,也是Spring團隊偏愛使用嵌套的元素而不是value屬性樣式的幾個地方之一。

idref元素

所述idref元件是一個防錯方法,主要通過將該容器中的另一個bean的id(將id作為一個字符串值傳遞-而不是引用)傳遞給標籤。

以下示例顯示了如何使用它:

<bean id="theTargetBean" class="..."/>

<bean id="theClientBean" class="...">
    <property name="targetName">
        //此處將 theTargetBean 作為字符串傳遞給 theClientBean的targetName屬性
        //而不是將theTargetName這個bean的實例傳遞給targetName屬性
        <idref bean="theTargetBean"/>
    </property>
</bean>

前面的bean定義代碼段(在運行時)與以下代碼段完全等效:
idref 等價的是 value標籤 而不是 ref標籤

<bean id="theTargetBean" class="..." />
<bean id="client" class="...">
    <property name="targetName" value="theTargetBean"/>
</bean>
元素 的local屬性在idref4.0 Bean XSD中不再受支持,因為它不再提供常規bean引用上的值。
升級到4.0模式時,將現有idref local引用更改為idref bean。

idref用法 可以校驗傳入的作為bean的id 會被用來校驗當前id的bean存不存在

<idref></idref>元素常用的位置(至少在spring2.0之前的版本中)是在ProxyFactoryBean bean定義中的AOP攔截器配置中。
在指定攔截器名稱時使用<idref></idref>元素可以防止拼寫錯誤。
ref 對其他Bean的引用

ref元素是