Spring入门09 - 属性参考与自动绑定
来源:互联网 发布:光纤猫691数据怎么办 编辑:程序博客网 时间:2024/06/17 17:49
入门 09 - 属性参考与自动绑定
在定义Bean时,除了直接指定值给属性值之外,还可以直接参考定义档中的其它Bean,例如HelloBean是这样的话:
HelloBean.java
package onlyfun.caterpillar;
import java.util.Date;
public class HelloBean {
private String helloWord = "Hello!World!";
private Date date;
public void setHelloWord(String helloWord) {
this.helloWord = helloWord;
}
public String getHelloWord() {
return helloWord + ":" + date.toString();
}
public void setDate(Date date) {
this.date = date;
}
public Date getDate() {
return date;
}
}
我们的Bean定义档中,先定义了一个dateBean,之后helloBean可以直接参考至dateBean,Spring会帮我们完成这个依赖关系:
<?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="dateBean" class="java.util.Date"/>
<bean id="helloBean" class="onlyfun.caterpillar.HelloBean">
<property name="helloWord">
<value>Hello!Justin!</value>
</property>
<property name="date">
<ref bean="dateBean"/>
</property>
</bean>
</beans><?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="dateBean" class="java.util.Date"/>
<bean id="helloBean" class="onlyfun.caterpillar.HelloBean">
<property name="helloWord">
<value>Hello!Justin!</value>
</property>
<property name="date">
<ref bean="dateBean"/>
</property>
</bean>
</beans>
直接指定值或是使用<ref>直接指定参考至其它的Bean,这种显式的关系指定是比较好的,不过Spring也支持隐式的自动绑定,您可 以透过类型(byType)或名称(byName)将Bean绑定至其它Bean上对应的属性,下面是个byType的例子:
<?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="dateBean" class="java.util.Date"/>
<bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="byType">
<property name="helloWord">
<value>Hello!Justin!</value>
</property>
</bean>
</beans>
在这边,我们并没有指定helloBean的Date属性,而是透过自动绑定,由于autowire指定了byType,所以会根据Date属性所接受的型态,判断BeanFactory中是否有类似的型态对象,并将之绑定至Date属性上。
您也可以指定byName来绑定,则Spring会根据bean的别名与属性名称是否符合来进行自动绑定,举个例子来说,如果是byName而Date属性要完成依赖注入的话,则必须修改一下第一个Bean的id值为date:
<?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="date" class="java.util.Date"/>
<bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="byName">
<property name="helloWord">
<value>Hello!Justin!</value>
</property>
</bean>
</beans>
隐式的自动绑定没办法从定义档中,清楚的看到是否每个属性都完成设定,我们可以加入相依检查,在< bean>上加入dependency-check,有四种相依检查方式:simple、objects、all、none。第一个只检查简单的属性,像是原生(primitive)数据型态或字符串对象,objects检查对象属性,all则检查全部的属性,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="dateBean" class="java.util.Date"/>
<bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="byType" dependency-check="all">
<property name="helloWord">
<value>Hello!Justin!</value>
</property>
</bean>
</beans>
如果相依检查发现有未完成的依赖关系,则运行时会丢出UnsatisfiedDependencyException。
- Spring入门09 - 属性参考与自动绑定
- Spring自动装配(绑定)与依赖检查
- Storyboard和属性自动绑定
- Spring属性自动装配
- Spring MVC 数据绑定入门
- [JavaScript] 对象与属性参考
- spring自动注入入门
- yii快速入门与参考
- Yii快速入门与参考
- yii快速入门与参考
- JavaBean中的绑定属性与限制属性
- Spring Framework 开发参考手册 之四 属性编辑器,数据绑定,校验与BeanWeapper(Bean封装)
- spring自动装配Bean属性
- Spring自动装配Bean属性
- spring属性 byName自动装配
- Spring 自动装配Bean属性
- Spring MVC3 复杂表单属性绑定
- Spring MVC3 复杂表单属性绑定
- Spring入门07 - Bean生命周期
- JAVA 在图像处理中的应用
- Spring入门08 - 不使用XML定义档
- 验证数字图片的生成
- 感觉嵌入式不像OOP那么好入门
- Spring入门09 - 属性参考与自动绑定
- 在C#中制作组合控件
- Spring入门10 - 集合对象注入
- WIN2000下CVS不同用户设置不同的访问权限方法
- Linux下CVS服务器安装
- Spring入门11 - DataSource注入
- 回复社区内一网友贴:我有罪吗?
- Sql Server数据库的备份和恢复措施
- 在较量中携手前行——写给Java 1.5和.NET 2.0