一起来读官方文档—–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元素是