Spring中 idref标签和ref的区别

首先先直白的解释,再详细介绍

区别:

ref:注入的是bean的实例 
idref:注入的是string。

 

 

测试案例:

package com.pojo;

public class Card {
  private  String cno;
  private  String cpwd;
public String getCno() {
	return cno;
}
public void setCno(String cno) {
	this.cno = cno;
}
public String getCpwd() {
	return cpwd;
}
public void setCpwd(String cpwd) {
	this.cpwd = cpwd;
}
public Card(String cno, String cpwd) {
	super();
	this.cno = cno;
	this.cpwd = cpwd;
}
public Card() {
	super();
	// TODO Auto-generated constructor stub
}
 
}

 第二个实体 

package com.pojo;

import java.util.List;
import java.util.Set;

public class Person {
     
	
	 private  String name;
	 private String address;
	 private  String pid;
	 
	 private List<String> lStrings;
	 private Set<Card> sCards;
	 private Card card;
	 
	public Card getCard() {
		return card;
	}
	public void setCard(Card card) {
		this.card = card;
	}
	public Set<Card> getsCards() {
		return sCards;
	}
	public void setsCards(Set<Card> sCards) {
		this.sCards = sCards;
	}
	public List<String> getlStrings() {
		return lStrings;
	}
	public void setlStrings(List<String> lStrings) {
		this.lStrings = lStrings;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getPid() {
		return pid;
	}
	public void setPid(String pid) {
		this.pid = pid;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", address=" + address + ", pid=" + pid + "]";
	}
	 
	public void initPerson() {
		System.out.println("初始化的方法"); 
	}
}

配置文件:

<?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:aop="http://www.springframework.org/schema/aop"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">

    <!-- 标签的解释: xmlns: XML Name space xmlns: 关于初始化bean的格式文件地址 xmlns:xsi 辅助初始化bean 
        xmlns:aop aop (面向切面) 标签的 约束 xsi:schemaLocation 用于声明目标的名称空间的模式文档 xmlns:context 
        关于spring上下文,包括加载资源文件 -->

    <!-- 产生一个springbean 因为我所有的产生的bean的对象全部都是写在xml配置文件中 那么就以为着 我需要加载这一个配置文件信息applicationContext 
        .xml 加载xml配置文件信息,那就意味着解析xml ,解析xml 就意味着使用dom4j 解析 class属性值的时候 根据class的值进行反射 
        class.fromName(class); IOC 无非就是使用dom4j +反射 hibernate(缓存机制 ) struts2(拦截器 >解析struts.xml文件并且 
        反射 web.xml) -->
    <!-- scope 不写 默认单例 bean-> person person1=new person() -->
    <bean id="person1" class="com.pojo.Person" scope="prototype" init-method="initPerson">
   

 
    <property name="sCards">
            <set>
                <ref bean="card" />
            </set>

        </property> 
       
  <property name="card" ref="card"></property>  
<!--idref  验证数据有效性    -->
 <property name="card" >
<idref bean="c"/>
</property>


    </bean>

    <bean id="card" class="com.pojo.Card">
 <property name="cno" value="123"></property>
       <property name="cpwd" value="123"></property>
      
    </bean>

</beans>
 

 

最后是temp:

用的Junit

package com.temp;

import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;

import com.zking.pojo.Card;
import com.zking.pojo.Person;

public class SpringTemp {

	
	@Test
	  public  void  createBean() {
		 
		ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
		
		Person person=(Person)	applicationContext.getBean("person1");
 
		
		System.out.println(person.getCard().getCno()+".........."+person.getCard().getCpwd());
		
		
		
	}
} 

测试结果:

<property name="card">中设置了<idref bean="c"/> 而card这个bean在当前的容器中并不存在所以出错。

将<idref bean="card"/> 改为<idref bean="card"/>顺利运行.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
百度Apollo opendrive规范的road link是指表示道路段的数据结构。它由一个或多个路径(path)和相应的属性(如路面类型、宽度、限速等)组成。 road link的定义如下: ``` <road id="ID"> <link> <predecessor id="IDREF" orientation="+|-" /> <successor id="IDREF" orientation="+|-" /> <predecessorLaneSection s="NUMBER"> <laneSection> ... </laneSection> </predecessorLaneSection> <successorLaneSection s="NUMBER"> <laneSection> ... </laneSection> </successorLaneSection> <geometry s="NUMBER" t="NUMBER" hdg="NUMBER" length="NUMBER"> <line x="NUMBER" y="NUMBER" z="NUMBER" /> <spiral a="NUMBER" b="NUMBER" c="NUMBER" d="NUMBER" /> <arc x="NUMBER" y="NUMBER" z="NUMBER" hdg="NUMBER" length="NUMBER" curvature="NUMBER" /> <poly3 x="NUMBER" y="NUMBER" z="NUMBER" a="NUMBER" b="NUMBER" c="NUMBER" d="NUMBER" /> <paramPoly3 x="NUMBER" y="NUMBER" z="NUMBER" a="NUMBER" b="NUMBER" c="NUMBER" d="NUMBER" u="NUMBER" v="NUMBER" w="NUMBER" /> <arcLength x="NUMBER" y="NUMBER" z="NUMBER" hdg="NUMBER" length="NUMBER" curvStart="NUMBER" curvEnd="NUMBER" /> </geometry> <roadMark s="NUMBER" t="NUMBER" type="string" weight="string" color="string" laneChange="string" material="string" width="NUMBER" /> <signal s="NUMBER" t="NUMBER" type="string" orientation="string" value="string" name="string" zOffset="NUMBER" height="NUMBER" width="NUMBER" pitch="NUMBER" roll="NUMBER" yaw="NUMBER" /> <object s="NUMBER" t="NUMBER" type="string" id="string" orientation="string" length="NUMBER" width="NUMBER" radius="NUMBER" height="NUMBER" hdg="NUMBER" pitch="NUMBER" roll="NUMBER" yaw="NUMBER" /> <surface s="NUMBER" t="NUMBER" friction="NUMBER" roughness="NUMBER" ... /> </link> ... </road> ``` 在road link,link元素表

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值