`
morgan117
  • 浏览: 4411 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Spring <idref>与<ref>的区别

阅读更多
Spring中,<idref>和<ref>还是比较容易混淆的。。 他们的本质区别是<idref>对应的是id的值,对应该值的property一般来说是String类型, 而<idref>对应的是bean的值, 对应该值的property是bean的类型。 这样说还是比较模糊的,看下面的例子。

package Impl;

public class Teacher {
	
	public Teacher(){
		
	}
	
	public Teacher(String name,Student student){
		
	}

}
 
package Impl;

public class Student {
	private Teacher teacher;  //Teacher类型
//	private IPhone phone;
	private String teacherId;  //String类型
	
	public Student(){
		
	}
	
	public Student(Teacher teacher){
		this.teacher = teacher;
	}

	public Teacher getTeacher() {
		return teacher;
	}

	public void setTeacher(Teacher teacher) {
		this.teacher = teacher;
	}

	public String getTeacherId() {
		return teacherId;
	}

	public void setTeacherId(String teacherId) {
		this.teacherId = teacherId;
	}
	
}


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p = "http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"
>

<bean id="student" class="Impl.Student" >
<property name="teacher">
	<ref bean="teacher"/>
</property>
<property name="teacherId">
	<idref bean="teacher"/>
</property>
</bean>



<bean id="teacher" class="Impl.Teacher">
	<constructor-arg index="0" type="java.lang.String">
		<value>Morgan</value>
	</constructor-arg>
	
	<constructor-arg index="1" ref="student">
	</constructor-arg>
</bean>

</beans>


package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import Impl.Student;

public class TestConstructorBeans {
	
	public static void main(String args[]){
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//		context.getBean("teacher");
		
		ApplicationContext context2 = new ClassPathXmlApplicationContext(new String[]{"constructorBeans.xml"},context);
		//context.getBean("phone2");
	    Student s = (Student)context2.getBean("student");
	    System.out.println(s.getTeacherId());
	}

}



需要指出的是,<idref bean="teacher"/> 可以用<value>teacher</value>替代,但是Spring是不会检出value是否存在的。。而是用idref, sping在加载的时候会检出idref的值是否存在。 因为拿到另一个bean的id, 基本上都是想在运行时通过getBean得到bean的实例。
分享到:
评论

相关推荐

    XML实用大全

    292&lt;br&gt;10.5.6 IDREF属性类型... 292&lt;br&gt;10.5.7 ENTITY属性类型... 293&lt;br&gt;10.5.8 ENTITIES 属性类型... 294&lt;br&gt;10.5.9 NOTATION属性类型... 294&lt;br&gt;10.6 预定义属性... 296&lt;br&gt;10.6.1 xml:space. 296&lt;br&gt;10.6.2 ...

    EPUB电子书介绍.docx

    - `&lt;itemref idref=""&gt;` - **idref**:与文件列表中的id关联。 - **指南**:指定电子书中的特定页面,如封面、目录等。 - **导读**:根据读者的需求定制特定的阅读路径。 #### 四、toc.ncx文件解析 - **作用**:...

    xml规范 中文版

    - **结束标签**:定义元素的结束,如`&lt;/element&gt;`。 - **空元素标签**:自闭合元素,如`&lt;element/&gt;`。 **3.2 元素类型声明** - **元素型内容**:仅包含其他元素。 - **混合型内容**:包含文本和子元素。 **3.3 ...

    一道数据库面试题

    &lt;Role idRef="admin_role"/&gt; &lt;/User&gt; &lt;/UserGroupSystem&gt; ``` 以上XML示例包含了用户组、角色和用户的基本信息,以及它们之间的关系。用户组可能有父组、描述;角色包含权限列表;用户指定其所属的角色。注意,...

    PDF版本的DocBook 5.0: 权威指南 版本为r8205

    - **元素示例**:如`&lt;abbrev&gt;`用于缩写词、`&lt;abstract&gt;`用于摘要、`&lt;acknowledgements&gt;`用于致谢等。 #### 结论 《PDF版本的DocBook 5.0: 权威指南》不仅是一本详尽的技术手册,也是学习和掌握DocBook 5.0的强大...

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

    除了这些核心概念,Spring的XML配置还包括其他元素,如`&lt;import&gt;`引入其他配置文件,`&lt;alias&gt;`为bean定义别名,以及`&lt;lookup-method&gt;`和`&lt;replaced-method&gt;`来处理方法的动态代理等。XML配置提供了一种声明式的方式...

    Jdbc_xml_html_css_js选择题(含答案).doc

    10. 要使文本与复选框关联,需使用`&lt;label&gt;`元素,且需指定`for`属性,与复选框的`id`匹配。正确答案是D。 11. `&lt;td&gt;`元素的属性不包括`cellpadding`,它已被废弃。正确的属性是`padding`。选项A是不正确的。 12. ...

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

    在这个例子中,`elementName`和`attributeName`与ID类型的声明类似,但`IDREF`是属性类型,`#IMPLIED`表示属性是可选的。 3. IDREFS类型属性取值设置 IDREFS类型扩展了IDREF,允许一个属性值包含多个ID引用,以...

    关于EPUB格式的初步理解

    &lt;itemref idref="cover" linear="no"/&gt; &lt;itemref idref="content"/&gt; &lt;/spine&gt; &lt;guide&gt; &lt;reference href="cover.html" type="cover" title="Cover"/&gt; &lt;/guide&gt; &lt;/package&gt; ``` #### 四、EPUB格式的应用 EPUB...

    XML DTD详细教程

    - **元素(Element)**:XML文档的核心,如`&lt;note&gt;`、`&lt;message&gt;`,可以包含文本、其他元素或为空。 - **属性(Attribute)**:提供元素的附加信息,如`&lt;img src="computer.gif" /&gt;`的`src`属性。 - **实体(Entity...

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

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

    chapter23 实践习题1

    例如,`&lt;department&gt;`标签使用`dept name`、`building`和`budget`属性来存储部门信息。同样,`&lt;instructor&gt;`标签使用`IID`、`name`、`dept name`和`salary`属性来描述教师。`&lt;teaches&gt;`标签则通过`IID`和`course id`...

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

    &lt;element1&gt;Some data&lt;/element1&gt; &lt;element2/&gt; &lt;/myDoc&gt; ``` 在这个例子中,`myDoc`是根元素,它包含`element1`和`element2`两个子元素。`element1`可以包含字符数据(#PCDATA),而`element2`是空元素。 三、...

    很好的xml学习资料

    4. 标记:XML文档的结构,如`&lt;class&gt; &lt;student&gt;&lt;name&gt;&lt;/name&gt;&lt;/student&gt;&lt;/class&gt;`。 5. 数据:XML文档中存储的实际内容,如`张三`。 6. 注释:`&lt;!-- 注释内容 --&gt;`用于添加解释性的文本。 7. 字符数据类型:#PCDATA...

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

    案例1展示了如何将子元素 `&lt;ISBN&gt;` 转换成 `&lt;Book&gt;` 元素的属性。在XML文档中,元素和属性的选择需要根据数据的结构和需求来决定。通常,数据本身存储在元素中,而元数据(关于数据的信息)则存储在属性中。如果信息...

    Flex企业级开发框架.pdf

    &lt;Property name="service" idRef="loginService"/&gt; &lt;/Object&gt; &lt;/Object&gt; &lt;/mx:Object&gt; ``` 通过以上的介绍可以看出,不同的框架各有侧重,选择合适的框架取决于具体项目的需要。例如,如果项目需要高度模块化...

    XML考试复习大纲及参考

    - **表格**:XML文档可以通过特定的标签结构来实现表格效果,例如使用`&lt;table&gt;`、`&lt;tr&gt;`、`&lt;td&gt;`等标签。 #### 第三章:XML标记与文档语法 - **3.1 XML标记语法** - **命名规则**:XML标签名不能以数字开头,不能...

    dtd编写说明文档,有语法,有内部声明,外部声明等

    `代表小于号`&lt;`)则用于在XML文档中嵌入特殊字符,避免与XML语法冲突。 在“dtd文档.docx”中,详细说明了这些概念,并提供了示例和指导,以帮助开发者理解如何创建和使用DTD来规范化XML文档的结构。通过学习和实践...

    XML应用开发(软件品牌)-1期 2.7 课堂实践-DTD中的元素属性定义.doc

    理解属性与子元素的区别也很关键。子元素(Element)是XML文档结构的一部分,它们形成了一种树状结构,而属性则附加在元素上,不参与这种结构。子元素可以包含文本内容或更多的子元素,而属性仅提供单一值。 在实际...

    spring.net中文手册在线版

    Spring.NET以Java版的Spring框架为基础,将Spring.Java的核心概念与思想移植到了.NET平台上。 第一章 序言 第二章 简介 2.1.概述 2.2.背景 2.3.模块 2.4.许可证信息 2.5.支持 第三章 背景 3.1.控制反转 第...

Global site tag (gtag.js) - Google Analytics