一直以为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的元素。
分享到:
相关推荐
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配置是实现依赖注入(DI)的主要方式之一。XML配置文件用于定义bean的实例化、初始化过程以及它们之间的依赖关系。以下是基于提供的文件内容详细讲解的几个关键知识点: 1. **value元素**: `...
其中,<xsd:extension base="beans:identifiedType"> 定义了该标签的id属性,注意这里引用的是spring-beans中的type,<xsd:group ref="stopElements"/>中定义了标签允许的子标签,<xsd:attributeGroup ref=...
与ID/IDREF相比,key/keyref有哪些优点,在使用上有何不同? 假设SpyBase1.xml中的alias、mission、spy来自不同的命名空间中,如何在Schema中对其进行限定,请在XMLSPY中完成相应的xsd文档?修改SpyBase1.xml,并...
本篇将重点讨论在DTD中设置属性取值类型,特别是ID、IDREF和IDREFS类型。 1. ID类型属性取值设置 ID类型的属性是唯一的,每个XML文档中不能有重复的ID属性值。这使得ID属性非常适合用作元素的唯一标识符。例如,...
这种机制使得我们可以链接XML文档中的不同部分,比如在文档结构中创建链接或交叉引用。如果IDREF值引用的ID不存在,解析器也会报告错误。 进一步地,IDREFS类型属性取值允许一个元素与多个元素之间建立一对多的关系...
通过以上实践,你可以更好地理解和运用XML中ID、IDREF和IDREFS属性取值类型,提升XML文档结构的严谨性和关联性。这些技能在XML应用开发中至关重要,无论是数据交换、文档管理还是Web服务,都有广泛的应用。
转子中的磁体产生转子磁链Λm,这一点与交流感应电机(AC Induction Motor, ACIM)不同,交流感应电机需要恒定参考值idref来磁化电流,从而产生转子磁链。本章的后面部分将介绍内置式永磁(Interior Permanent ...
- 它通过模板匹配来定义转换规则,例如,上述题目中展示了如何使用XSLT仅显示student-info元素的name和class,并控制它们的显示顺序。 5. DSO(数据源对象): - DSO是Microsoft ActiveX控件,用于在HTML页面中...
本节主要讨论在DTD中设置属性取值类型,包括ID、IDREF和IDREFS类型。 1. ID类型属性取值设置: ID类型的属性具有唯一性,每个XML文档中只能有一个元素的该属性值是唯一的。在DTD中,我们可以通过以下方式定义ID...
在这个加速运行过程中,如果检测到运行速度不小于预设值,会将Wrref与Wrest的差值经过比例积分(PI)运算,得出电流在DQ坐标系上的D轴电流参考值Idref和Q轴电流参考值Iqref。 这里所说的DQ坐标系是一种在电机控制中...
简单类型和复杂类型是 XML Schema 中用于定义数据类型的两个主要类别。简单类型仅允许基本的数据值,如字符串、日期等,而复杂类型可以包含其他元素、属性或者组合简单类型。选项 D 表述了简单类型的一个特性,即...
通过以上的介绍可以看出,不同的框架各有侧重,选择合适的框架取决于具体项目的需要。例如,如果项目需要高度模块化的开发,那么 PureMVC 或者支持 Flex Module 的框架可能是更好的选择;如果项目更侧重于 IoC 容器...
在XML(eXtensible Markup Language)中,DTD(Document Type Definition)是一种用于定义XML文档结构和元素的规范。在DTD中,元素属性的定义是至关重要的,因为它允许我们在元素中添加额外的信息,以增强数据的表达...
5. 删除ID/IDREF关系:如果存在ID/IDREF(标识符和引用标识符的关系),在规范化过程中会保持这些关系的完整性。 了解这些概念后,开发者可以更好地理解和利用"atlopez-xml-canonization_vfpcanonice_"来处理他们的...
jaxb框架中提供两种编写XML和java对象交互的方法:一种是通过XSD(XMLSchema Definition)文档生成Java类的方式,另一种是通过编写标注java类,之后生成相应的XSD文档。 jaxb定义的标记比较多,也很复杂,要想灵活...
XML Schema允许定义复杂数据类型,如日期、时间、浮点数等,并且支持命名空间,使得在大型项目中管理不同的XML元素和属性变得更加容易。XML Schema使用XML语法来描述文档结构,这使得Schema本身也成为了XML文档,...
XML的结构清晰,独立于软件和硬件,使得数据在不同的系统之间交换变得简单。以下是对XML的一些关键知识点的详细阐述: 1. XML基本结构:XML文档由元素、属性、文本和声明组成。元素是XML文档的核心,它们定义了数据...
在这个例子中,`myDoc`是根元素,它包含`element1`和`element2`两个子元素。`element1`可以包含字符数据(#PCDATA),而`element2`是空元素。 三、外部DTD 外部DTD是将DTD定义保存在单独的文件中,然后在XML文档的`...
在开放性试验部分,手册指导用户如何控制电机的电流指令Idref和Iqref,使用STStudio观测变量变化,并通过旋钮(连接到ADC采样)来观察Iqref的变化。用户可以观察到速度以及Studio上变量的变化,还可以自由添加想要...