分享

用ref的属性指定依赖的3种模式

 樱花梦_张艺馨 2016-11-28
在spring中,用ref的属性指定依赖。有三种模式:local、Bean 和 parent
A:用local属性指定:
       如果一个Bean与被参考引用的Bean在一个XML文件中而且被参考引用的Bean是用id来命名的,那么就可以使用ref的local属性。这样会让XML解析器更早的在XML文档解析时,验证Bean的id。local属性的值必须与被参考引用的Bean的id 属性一致。如果在同一个XML文件中没有匹配的元素,XML解析器将会产生一个错误。
用XML来配置文档的一个明显缺点是,开发人员不能及时的发现XML中的错误,为了能尽可能的发现XML中的错误配置信息,如果一个Bean与被参考引用的Bean在同一个XML文件中,那么使用local形式将是最好的选择。
B:用Bean属性指定:
用ref元素的Bean属性指定被参考引用的Bean是Spring中常见的形式,它允许指向的Bean可以在同一个XML中,也可以不在同一个XML中,Bean属性的值可以与被参考引用的Bean的id属性相同,也可以与被参考引用的Bean的name属性相同。
C :用parent属性指定:
用parent属性指定被参考引用的Bean时,允许引用当前BeanFactory或ApplicationContext的父BeanFactory或ApplicationContext中的Bean。parent属性的值可以与被参考引用的Bean的id属性相同,也可以与被参考引用Bean的name属性相同。
用local属性与Bean属性指定依赖的比较:
 
在这三种模式中,用local属性指定依赖和用Bean属性指定依赖最为常用。
相同之处:两种模式都可以用Bean的id来进行参考引用,都可以对同一XML中的Bean进行参考引用。
不同之处:用Bean属性指定依赖可以用Bean的name来进行参考引用,还可以对不同XMl中得到Bean进行参考引用
===========================练习一:ref的local属性来指定依赖============
----------------HelloWord类 ---------------
package com.gc.action;
import java.util.Date;
public class HelloWord {
 private String msg;
 private Date date;
 
 // 无参构造方法
 public HelloWord() {
  super();
 }
 // 带参构造
 public HelloWord(String msg) {
  super();
  this.msg = msg;
 }
 
 // ---getXxx 和setXxx
 public String getMsg() {
  return msg;
 }
 public void setMsg(String msg) {
  this.msg = msg;
 }
 public Date getDate() {
  return date;
 }
 public void setDate(Date date) {
  this.date = date;
 }
}
------------------------config.xml----------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
 "http://www./dtd/spring-beans.dtd">
<beans>
 <bean id="HelloWord" class="com.gc.action.HelloWord" depends-on="date" >
 <property name="msg">
  <value>zxx</value>
 </property>
 <property name="date">
  <ref local="date"/>
 </property>
 </bean>
 <bean id="date" class="java.util.Date"></bean>
</beans>
-------------------TestHelloWord 测试类----------------------
package com.gc.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.gc.action.HelloWord;
public class TestHelloWord {
 /**
  * @param args
  */
 public static void main(String[] args) {
  ApplicationContext ac =new FileSystemXmlApplicationContext("classpath:/config.xml");
  HelloWord hw =(HelloWord) ac.getBean("HelloWord");
  System.out.println(hw.getMsg()+"----"+hw.getDate());
 }
}
-----------结果--------------
zxx----Mon Nov 28 16:37:02 CST 2016
========================练习二:用ref的Bean属性来指定依赖=========
其余类不变,xml修改:
-------------------------config.xml----------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
 "http://www./dtd/spring-beans.dtd">
<beans>
 <bean id="HelloWord" class="com.gc.action.HelloWord" depends-on="date" >
 <property name="msg">
  <value>zxx</value>
 </property>
 <property name="date">
  <ref bean="date"/>
 </property>
 </bean>
 <bean id="date" class="java.util.Date"></bean>
</beans>
===================练习三 用ref的parent属性来指定依赖=============
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
 "http://www./dtd/spring-beans.dtd">
<beans>
 <bean id="HelloWord" class="com.gc.action.HelloWord" depends-on="date" >
 <property name="msg">
  <value>zxx</value>
 </property>
 <property name="date">
  <ref parent="date"/>
 </property>
 </bean>
 <bean id="date" class="java.util.Date"></bean>
</beans>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多