`
王牌海盗
  • 浏览: 239480 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[转]Spring中idref和ref的不同

阅读更多
一直以为ref和idref没有大的区别,它们两个可以替换。

网上也有很多人认为这两个没区别。

最近做Spring和Hibernate的集成的时候发现配置sessionFactory的dataSource的时候用idref不行,用ref就行。

配置文件beans.xml为:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">



<beans>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

        <property name="mappingDirectoryLocations">

            <list>

                <value>org/li/hibernate/spring/entity</value>

            </list>

        </property>

        <property name="dataSource">

            <ref bean="dataSource"/>

        </property>

        <property name="hibernateProperties">

            <props>

                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

                <prop key="show_sql">true</prop>

            </props>

        </property>

    </bean>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="url">

            <value>jdbc:mysql://localhost:3306/spring</value>

        </property>

        <property name="driverClassName">

            <value>com.mysql.jdbc.Driver</value>

        </property>

        <property name="username">

            <value>root</value>

        </property>

        <property name="password">

            <value>java</value>

        </property>

    </bean>

    <bean id="ArticleDAO" class="org.li.spring.hibernate.dao.implement.ArticleDAO">

        <property name="hibernateTemplate">

            <ref local="hibernateTemplate"/>

        </property>

    </bean>

    

    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">

        <property name="sessionFactory">

            <ref bean="sessionFactory"/>

        </property>

    </bean>

</beans>

如果将上面的

<property name="dataSource">


            <ref local="dataSource"/>

</property>

换成

<property name="dataSource">


      <idref local="dataSource"/>

</property>

就出错了

这是我的测试类:

Resource res=new ClassPathResource("beans.xml");

BeanFactory bf=new XmlBeanFactory(res);

ArticleDAO articleDao = (ArticleDAO) bf.getBean("ArticleDAO");

Article article = new Article();

article.setTitle("学习Spring");

article.setContent("Spring和Hibernate的如何集成的呢~");

article.setAuthor("javafish");

articleDao.save(article);



异常发生在org.springframework.beans.TypeConverterDelegate这个类中的

convertIfNecessary函数里的

if (!ClassUtils.isAssignableValue(requiredType, convertedValue)) {

                // Definitely doesn't match: throw IllegalArgumentException.

                throw new IllegalArgumentException("No matching editors or conversion strategy found");

两句代码上:

分别用ref和idref配置beans.xml调试了程序

发现如果是用idref配置的话,当解析到dataSource的时候requiredType的值为"java.sql.dataSource,
cov,ertedValue的值为"dataSource"<----这只是个在配置文件里标识类的字符串不是我们想要的类

如果是用ref配置的话,当解析到dataSource的时候requiredType的值为"java.sql.dataSource,cov,ertedValue的值为"DriverManagerDataSource"<-----这正是我们想要的类



所以idref有两个作用,1.方便xml检查,2.它和<value>差不多,只一个字符串。
ref呢:是spring提供的用于引用bean的元素。
分享到:
评论
1 楼 whicky 2009-04-22  

刚看到另一篇文章中说道:idref取得的是bean的id的字符串值;ref才是真正取得bean的引用值。

解决了我的困惑。

相关推荐

    spring.net中文手册在线版

    4.3.3.8.value和ref节点的简短格式 4.3.3.9.复合属性名 4.3.4.方法注入 4.3.4.1.查询方法注入 4.3.4.2.替换任意方法 4.3.5.引用其他对象或类型的成员 4.3.5.1.使用对象或类的属性值进行注入 4.3.5.2.使用字段值进行...

    Spring中xml的配置[定义].pdf

    在Spring框架中,XML配置是实现依赖注入(DI)的主要方式之一。XML配置文件用于定义bean的实例化、初始化过程以及它们之间的依赖关系。以下是基于提供的文件内容详细讲解的几个关键知识点: 1. **value元素**: `...

    基于Spring开发之自定义标签及其解析

    其中,&lt;xsd:extension base="beans:identifiedType"&gt; 定义了该标签的id属性,注意这里引用的是spring-beans中的type,&lt;xsd:group ref="stopElements"/&gt;中定义了标签允许的子标签,&lt;xsd:attributeGroup ref=...

    《XML》实验任务书 XML Schema 答案 解答

    与ID/IDREF相比,key/keyref有哪些优点,在使用上有何不同? 假设SpyBase1.xml中的alias、mission、spy来自不同的命名空间中,如何在Schema中对其进行限定,请在XMLSPY中完成相应的xsd文档?修改SpyBase1.xml,并...

    XML应用开发(软件品牌)-1期 2.10 课堂实践-DTD中属性取值类型设置(上).doc

    本篇将重点讨论在DTD中设置属性取值类型,特别是ID、IDREF和IDREFS类型。 1. ID类型属性取值设置 ID类型的属性是唯一的,每个XML文档中不能有重复的ID属性值。这使得ID属性非常适合用作元素的唯一标识符。例如,...

    XML应用开发(软件品牌)-1期 2.11 案例分析-DTD中属性取值类型设置(中).doc

    这种机制使得我们可以链接XML文档中的不同部分,比如在文档结构中创建链接或交叉引用。如果IDREF值引用的ID不存在,解析器也会报告错误。 进一步地,IDREFS类型属性取值允许一个元素与多个元素之间建立一对多的关系...

    XML应用开发(软件品牌)-1期 2.11 课堂实践-DTD中属性取值类型设置(中).doc

    通过以上实践,你可以更好地理解和运用XML中ID、IDREF和IDREFS属性取值类型,提升XML文档结构的严谨性和关联性。这些技能在XML应用开发中至关重要,无论是数据交换、文档管理还是Web服务,都有广泛的应用。

    采用降阶龙伯格观测器实现PMSM的无传感器FOC.zip

    转子中的磁体产生转子磁链Λm,这一点与交流感应电机(AC Induction Motor, ACIM)不同,交流感应电机需要恒定参考值idref来磁化电流,从而产生转子磁链。本章的后面部分将介绍内置式永磁(Interior Permanent ...

    2009xml考试试题

    - 它通过模板匹配来定义转换规则,例如,上述题目中展示了如何使用XSLT仅显示student-info元素的name和class,并控制它们的显示顺序。 5. DSO(数据源对象): - DSO是Microsoft ActiveX控件,用于在HTML页面中...

    XML应用开发(软件品牌)-1期 2.12 课堂实践-DTD中属性取值类型设置(下).doc

    本节主要讨论在DTD中设置属性取值类型,包括ID、IDREF和IDREFS类型。 1. ID类型属性取值设置: ID类型的属性具有唯一性,每个XML文档中只能有一个元素的该属性值是唯一的。在DTD中,我们可以通过以下方式定义ID...

    CN201210216151-空调用永磁同步风扇电机的启动方法和系统-申请公开.pdf

    在这个加速运行过程中,如果检测到运行速度不小于预设值,会将Wrref与Wrest的差值经过比例积分(PI)运算,得出电流在DQ坐标系上的D轴电流参考值Idref和Q轴电流参考值Iqref。 这里所说的DQ坐标系是一种在电机控制中...

    html&xml期末复习资料.pdf

    简单类型和复杂类型是 XML Schema 中用于定义数据类型的两个主要类别。简单类型仅允许基本的数据值,如字符串、日期等,而复杂类型可以包含其他元素、属性或者组合简单类型。选项 D 表述了简单类型的一个特性,即...

    Flex企业级开发框架.pdf

    通过以上的介绍可以看出,不同的框架各有侧重,选择合适的框架取决于具体项目的需要。例如,如果项目需要高度模块化的开发,那么 PureMVC 或者支持 Flex Module 的框架可能是更好的选择;如果项目更侧重于 IoC 容器...

    XML应用开发(软件品牌)-1期 2.7 案例分析-DTD中的元素属性定义.doc

    在XML(eXtensible Markup Language)中,DTD(Document Type Definition)是一种用于定义XML文档结构和元素的规范。在DTD中,元素属性的定义是至关重要的,因为它允许我们在元素中添加额外的信息,以增强数据的表达...

    atlopez-xml-canonizacion_vfpcanonice_

    5. 删除ID/IDREF关系:如果存在ID/IDREF(标识符和引用标识符的关系),在规范化过程中会保持这些关系的完整性。 了解这些概念后,开发者可以更好地理解和利用"atlopez-xml-canonization_vfpcanonice_"来处理他们的...

    jaxb开发使用文档

    jaxb框架中提供两种编写XML和java对象交互的方法:一种是通过XSD(XMLSchema Definition)文档生成Java类的方式,另一种是通过编写标注java类,之后生成相应的XSD文档。 jaxb定义的标记比较多,也很复杂,要想灵活...

    XML DTD,XmlSchema标准参考手册

    XML Schema允许定义复杂数据类型,如日期、时间、浮点数等,并且支持命名空间,使得在大型项目中管理不同的XML元素和属性变得更加容易。XML Schema使用XML语法来描述文档结构,这使得Schema本身也成为了XML文档,...

    非常好非常简练的XML教程-推荐

    XML的结构清晰,独立于软件和硬件,使得数据在不同的系统之间交换变得简单。以下是对XML的一些关键知识点的详细阐述: 1. XML基本结构:XML文档由元素、属性、文本和声明组成。元素是XML文档的核心,它们定义了数据...

    XML中的外部dtd和内部dtd实例

    在这个例子中,`myDoc`是根元素,它包含`element1`和`element2`两个子元素。`element1`可以包含字符数据(#PCDATA),而`element2`是空元素。 三、外部DTD 外部DTD是将DTD定义保存在单独的文件中,然后在XML文档的`...

    STM32_motor_control_training_hands_on_201708

    在开放性试验部分,手册指导用户如何控制电机的电流指令Idref和Iqref,使用STStudio观测变量变化,并通过旋钮(连接到ADC采样)来观察Iqref的变化。用户可以观察到速度以及Studio上变量的变化,还可以自由添加想要...

Global site tag (gtag.js) - Google Analytics