随笔 - 4  文章 - 10  trackbacks - 0
<2007年12月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿(1)

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

4.4用ref的属性指定依赖的3种模式
(1) 用local属性指定
 如果一个Bean与被参考引用的Bean在同一个XML文件中而且被参考引用的Bean是用id来命名的,那么就可以使用ref的local属性.这样会使XML

解释器更早地在XML文档解释时,验证Bean的id.local属性的值必须与被参考引用的Bean的id属性一致

4.5 Bean自动装配的5种模式
(1)使用byName模式
   byName模式指的就是通过Bean的属性名字进行自动装配。在Spring的配置文档XML中,查找一个与将要装配的属性同名字的Bean.
   在配置文档中,有一个id为HelloWorld的Bean被设置为通过byName自动装配,Helloworld.java包含一个date变量,Spring就会查找一个叫

做date的Bean定义,然后用它来设置date属性。
****HelloWorld*****
package com.gc.action;
import java.util.Date;
public class HelloWorld{
private String msg=null;
private Date date=null;
public void setMsg(String msg){
 this.msg=msg;
}
public String getMsg(){
return this.msg;
}
public void setDate(Date date){
this.date=date;
}
public Date getDate(){
return this.date;
}
}

配置文档config.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="HelloWorld" class="com.gc.action.HelloWorld" autowire="byName">
  <property name="msg">
   <value>HelloWorld</value>
</property>
</bean>
<bean id="date" class="java.util.Date"/>
<beans>

(2)使用ByType模式
   byType模式指的就是如果XML中正好有一个与类型一样的Bean,就自动装配这个属性。如果有多于一个这样的Bean,就抛出一个异常,指出可

能不能对那个Bean使用byType的自动装配。

   在配置文档中,有一个id为HelloWorld的Bean被设置为通过byType自动装配,Helloworld.java包含一个date变量,Spring就会查找一个类

型为date的Bean定义,然后用它来设置date属性。
****HelloWorld*****
同上

配置文档config.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="HelloWorld" class="com.gc.action.HelloWorld" autowire="byType">
  <property name="msg">
   <value>HelloWorld</value>
</property>
</bean>
<bean id="date" class="java.util.Date"/>
<beans>

(3)使用constructor模式
   constructor模式指的就是根据构造函数的参数进行自动装配。在配置文档中,有一个id为HelloWorld的Bean被设置为通过constructor自动

装配,HelloWorld.java包含一个构造函数方法,spring就会根据构造函数的参数查找合适类型的Bean定义,然后用它来设置购置函数的参数的

值。
****HelloWorld*****
package com.gc.action;
import java.util.Date;
public class HelloWorld{
private String msg=null;
private Date date=null;
public HelloWorld(Date date)
this.date=date;
}
public void setMsg(String msg){
 this.msg=msg;
}
public String getMsg(){
return this.msg;
}
public void setDate(Date date){
this.date=date;
}
public Date getDate(){
return this.date;
}
}

配置文档config.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="HelloWorld" class="com.gc.action.HelloWorld" autowire="constructor">
  <property name="msg">
   <value>HelloWorld</value>
</property>
</bean>
<bean id="date" class="java.util.Date"/>
<beans>

(4)autodetect模式指的就是通过对Bean检查类的内部来选择constructor或byType.如果先找到constructor就用constructor;如果没有

constructor,而找到byType,就用byType.
****HelloWorld****
同上(3)

配置文件config.xml
autowire="autodetect"

(5)no模式指的就是不使用自动装配。
****HelloWorld****
同上(3)

配置文件config.xml
autowire="no"
小结:对于大型的应用,不鼓励使用自动装配,因为它去除了参考依赖的透明性和清晰性。有了自动装配后,可以减少开发人员的输入问题,但

是却使开发人员很难看出Bean的每个属性都是否设定完成。
完成


4.6 Bean依赖检查的4种模式
就像自动装配功能一样,依赖检查能够分别对每一个Bean应用或取消应用。默认的是不检查依赖关系。使用Bean元素的dependency-check属性

来指定Bean定义的依赖检查共有4种模式:simple.object.all.none
借助依赖检查来实现查看Bean的每个属性是否都设定完成的功能
(1)使用simple模式
  simple模式指的是对基本类型,字符串和集合进行依赖检查。
<?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="HelloWorld" class="com.gc.action.HelloWorld" autowire="autodetect" dependency-check="simple">
 </bean>
 <bean id="date" class="java.util.Date"/>
 </beans>

(2)使用object模式
  object模式指的是对依赖对象进行依赖检查.
<?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="HelloWorld" class="com.gc.action.HelloWorld" autowire="autodetect" dependency-check="object">
 </bean>
 <bean id="date" class="java.util.Date"/>
 </beans>

(3)使用all模式
  all模式的是对全部属性进行依赖检查
<?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="HelloWorld" class="com.gc.action.HelloWorld" autowire="autodetect" dependency-check="all">
 </bean>
 <bean id="date" class="java.util.Date"/>
 </beans>


(4)使用none模式
  none模式指的是不进行依赖检查
<?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="HelloWorld" class="com.gc.action.HelloWorld" autowire="autodetect" dependency-check="none">
 </bean>
 <bean id="date" class="java.util.Date"/>
 </beans>
小结:一般情况下,依赖检查和自动装配结合使用。当开发人员想看Bean的每个属性是否都设定完成的时候,依赖检查的作用显得更大。当依

赖检查和自动装配结合使用时,依赖检查会在自动装配完后发生。当Bean的属性都有默认的值,或者不需要对Bean的属性是否都被设置到Bean

上检查时,依赖检查的作用就不是很大了,

4.7 集合的注入方式
(1).List
****HelloWorld****
package com.gc.action;
public class HelloWorld{
private List msg=null;
public void setMsg(List msg){
this.msg=msg;
}
public List getMsg(){
return this.msg;
}
}

配置文档
<beans>
<bean id="HelloWorld" class=com.gc.action.HelloWorld">
<property name="msg">
<list>
<value>gf</value>
<value>gd</value>
<value>HelloWorld</value>
</list>
</property>
<beans>

(2).Set
****HelloWorld****
package com.gc.action;
public class HelloWorld{
private Set msg=null;
public void setMsg(Set msg){
this.msg=msg;
}
public Set getMsg(){
return this.msg;
}
}

配置文档
<beans>
<bean id="HelloWorld" class=com.gc.action.HelloWorld">
<property name="msg">
<set>
<value>gf</value>
<value>gd</value>
<value>HelloWorld</value>
</set>
</property>
<beans>

(3).Map
****HelloWorld****
package com.gc.action;
public class HelloWorld{
private Map msg=null;
public void setMsg(Map msg){
this.msg=msg;
}
public Map getMsg(){
return this.msg;
}
}

配置文档
<beans>
<bean id="HelloWorld" class=com.gc.action.HelloWorld">
<property name="msg">
<Map>
<entry key="gf">
<value>HelloWorld</value>
</entry>
<entry key="gd">
<value>HelloWorld</value>
</entry>
</Map>
</property>
<beans>

(4).Properties
****HelloWorld****
package com.gc.action;
public class HelloWorld{
private Properties msg=null;
public void setMsg(Properties msg){
this.msg=msg;
}
public Properties getMsg(){
return this.msg;
}
}

配置文档
<beans>
<bean id="HelloWorld" class=com.gc.action.HelloWorld">
<property name="msg">
<props>
<prop key="gf">HelloWorld</prop>
<prop key="gd">HelloWorld</prop>
</props>
</property>
<beans>
小结:对于List.set.Map和Properties来说都是类似的,就是都要把要注入的信息注入到集合中去,然后在把集合注入到相关的Bean中.

posted on 2007-12-25 15:12 冬天出走的猪 阅读(1005) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: