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的实例。
分享到:
相关推荐
292<br>10.5.6 IDREF属性类型... 292<br>10.5.7 ENTITY属性类型... 293<br>10.5.8 ENTITIES 属性类型... 294<br>10.5.9 NOTATION属性类型... 294<br>10.6 预定义属性... 296<br>10.6.1 xml:space. 296<br>10.6.2 ...
- `<itemref idref="">` - **idref**:与文件列表中的id关联。 - **指南**:指定电子书中的特定页面,如封面、目录等。 - **导读**:根据读者的需求定制特定的阅读路径。 #### 四、toc.ncx文件解析 - **作用**:...
- **结束标签**:定义元素的结束,如`</element>`。 - **空元素标签**:自闭合元素,如`<element/>`。 **3.2 元素类型声明** - **元素型内容**:仅包含其他元素。 - **混合型内容**:包含文本和子元素。 **3.3 ...
<Role idRef="admin_role"/> </User> </UserGroupSystem> ``` 以上XML示例包含了用户组、角色和用户的基本信息,以及它们之间的关系。用户组可能有父组、描述;角色包含权限列表;用户指定其所属的角色。注意,...
- **元素示例**:如`<abbrev>`用于缩写词、`<abstract>`用于摘要、`<acknowledgements>`用于致谢等。 #### 结论 《PDF版本的DocBook 5.0: 权威指南》不仅是一本详尽的技术手册,也是学习和掌握DocBook 5.0的强大...
除了这些核心概念,Spring的XML配置还包括其他元素,如`<import>`引入其他配置文件,`<alias>`为bean定义别名,以及`<lookup-method>`和`<replaced-method>`来处理方法的动态代理等。XML配置提供了一种声明式的方式...
10. 要使文本与复选框关联,需使用`<label>`元素,且需指定`for`属性,与复选框的`id`匹配。正确答案是D。 11. `<td>`元素的属性不包括`cellpadding`,它已被废弃。正确的属性是`padding`。选项A是不正确的。 12. ...
在这个例子中,`elementName`和`attributeName`与ID类型的声明类似,但`IDREF`是属性类型,`#IMPLIED`表示属性是可选的。 3. IDREFS类型属性取值设置 IDREFS类型扩展了IDREF,允许一个属性值包含多个ID引用,以...
<itemref idref="cover" linear="no"/> <itemref idref="content"/> </spine> <guide> <reference href="cover.html" type="cover" title="Cover"/> </guide> </package> ``` #### 四、EPUB格式的应用 EPUB...
- **元素(Element)**:XML文档的核心,如`<note>`、`<message>`,可以包含文本、其他元素或为空。 - **属性(Attribute)**:提供元素的附加信息,如`<img src="computer.gif" />`的`src`属性。 - **实体(Entity...
其中,<xsd:extension base="beans:identifiedType"> 定义了该标签的id属性,注意这里引用的是spring-beans中的type,<xsd:group ref="stopElements"/>中定义了<bf:stop>标签允许的子标签,<xsd:attributeGroup ref=...
例如,`<department>`标签使用`dept name`、`building`和`budget`属性来存储部门信息。同样,`<instructor>`标签使用`IID`、`name`、`dept name`和`salary`属性来描述教师。`<teaches>`标签则通过`IID`和`course id`...
<element1>Some data</element1> <element2/> </myDoc> ``` 在这个例子中,`myDoc`是根元素,它包含`element1`和`element2`两个子元素。`element1`可以包含字符数据(#PCDATA),而`element2`是空元素。 三、...
4. 标记:XML文档的结构,如`<class> <student><name></name></student></class>`。 5. 数据:XML文档中存储的实际内容,如`张三`。 6. 注释:`<!-- 注释内容 -->`用于添加解释性的文本。 7. 字符数据类型:#PCDATA...
案例1展示了如何将子元素 `<ISBN>` 转换成 `<Book>` 元素的属性。在XML文档中,元素和属性的选择需要根据数据的结构和需求来决定。通常,数据本身存储在元素中,而元数据(关于数据的信息)则存储在属性中。如果信息...
<Property name="service" idRef="loginService"/> </Object> </Object> </mx:Object> ``` 通过以上的介绍可以看出,不同的框架各有侧重,选择合适的框架取决于具体项目的需要。例如,如果项目需要高度模块化...
- **表格**:XML文档可以通过特定的标签结构来实现表格效果,例如使用`<table>`、`<tr>`、`<td>`等标签。 #### 第三章:XML标记与文档语法 - **3.1 XML标记语法** - **命名规则**:XML标签名不能以数字开头,不能...
`代表小于号`<`)则用于在XML文档中嵌入特殊字符,避免与XML语法冲突。 在“dtd文档.docx”中,详细说明了这些概念,并提供了示例和指导,以帮助开发者理解如何创建和使用DTD来规范化XML文档的结构。通过学习和实践...
理解属性与子元素的区别也很关键。子元素(Element)是XML文档结构的一部分,它们形成了一种树状结构,而属性则附加在元素上,不参与这种结构。子元素可以包含文本内容或更多的子元素,而属性仅提供单一值。 在实际...
Spring.NET以Java版的Spring框架为基础,将Spring.Java的核心概念与思想移植到了.NET平台上。 第一章 序言 第二章 简介 2.1.概述 2.2.背景 2.3.模块 2.4.许可证信息 2.5.支持 第三章 背景 3.1.控制反转 第...