在定义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。
相关推荐
**AngularJS入门教程04:双向绑定** 在深入讲解AngularJS的双向数据绑定之前,我们先来了解一下AngularJS的核心概念。AngularJS是一个强大的JavaScript框架,主要用于构建动态Web应用。它通过MVC(Model-View-...
- **属性绑定**:将配置文件中的值绑定到 Java 类中。 - **多环境配置**:支持不同的配置文件以适应不同的环境。 - **YAML vs Properties**:两种常见的配置文件格式。 - **配置加载顺序**:理解不同配置源的优先级...
### Flex入门知识点详解 #### 1. Flex简介与学习指南 - **Flex概述**:Flex是一种用于构建跨浏览器、跨平台的RIA(Rich Internet Applications)的开源框架。它结合了强大的编程语言ActionScript 3.0和XML,使得...
- 展示如何将事件处理函数与控件绑定,实现交互功能。 - **设置对话框控件的Tab顺序** - 解释Tab键导航的重要性,并提供设置Tab顺序的方法。 - **模态对话框及其弹出过程** - 介绍模态对话框的特点及其创建和显示...
1. **基础概念**:Vue的核心概念,如虚拟DOM、组件化、指令系统(v-model、v-if、v-for等)、属性绑定、事件处理等。 2. **组件系统**:Vue的强大之处在于其组件化设计,允许开发者构建可复用的UI模块。包括组件定义...
### Spring Boot参考指南知识点概述 #### 一、Spring Boot 文档概述 - **关于本文档**:本指南旨在提供Spring Boot全面的使用手册,适用于初学者到进阶开发者。 - **获取帮助**:介绍了如何获得Spring Boot相关的...
### Spring Boot中文参考指南知识点概览 #### 一、Spring Boot 概述 - **Spring Boot** 是一种简化新Spring应用的初始搭建以及后续开发的框架。它旨在通过提供默认配置来简化设置过程,使开发者能够专注于应用的...
计算属性(`computed`)用于根据其他数据计算出新的值,它们自动响应依赖的变化。而侦听器(`watch`)则可以监听数据变化,执行特定操作,如异步请求或复杂逻辑处理。 5. **生命周期钩子** Vue组件有自己的生命...
- **文档概述**:本手册是一份非常全面的Spring Boot中文参考文档,涵盖了从入门到进阶的多个方面,适合不同水平的开发者参考。 - **获取帮助**:提供了多种途径帮助开发者解决在使用Spring Boot过程中遇到的问题,...
- **属性绑定**:使用`v-bind`指令将属性值与数据模型关联。 - **事件绑定**:使用`v-on`指令监听并处理DOM事件。 4. **条件与循环**: - **v-if与v-show**:控制元素的渲染,v-if根据条件判断是否渲染,v-show...
**Delphi入门基础教程——Object Pascal中文参考手册** Delphi是一款强大的Windows应用程序开发工具,它以其高效的编译器和直观的可视化设计界面而受到开发者们的喜爱。Object Pascal是Delphi的核心编程语言,它是...
Vue 2 技术参考手册详细解析 Vue.js 是一款轻量级的JavaScript框架,它以其易用性、灵活性和高效性在前端开发领域中备受推崇。Vue 2是其第二个主要版本,针对性能和功能进行了优化,进一步提升了开发者体验。 1. *...
### iOS应用教程入门知识点 #### 一、介绍与设置 - **目的与适用范围**: - 本教程旨在引导初学者快速上手iOS应用程序开发,适用于希望在Mac上为iPad、iPhone和iPod touch创建应用程序的新手开发者。 - 通过本...
1. **数据绑定**:Exjs支持双向数据绑定,这意味着视图和模型之间的数据可以自动同步。当你在模型中修改数据时,相关的视图部分会自动更新;反之亦然。这种特性大大减少了开发者手动操作DOM(文档对象模型)的工作量...
4. **自动属性**:简化了属性的声明,减少样板代码。 5. **集合初始化器**和**对象初始化器**:提供了更直观的方式来创建和初始化集合和复杂类型的实例。 6. **泛型委托和事件**:增强了泛型的功能,使得泛型可以...
1. **数据绑定**:将测试数据与测试步骤关联,使测试更加灵活。 2. **Excel数据源**:常用的数据源之一,通过链接Excel表格来实现多数据集测试。 ### 七、参数化与关联 1. **参数化**:将固定值替换为变量,实现对...
在C# 2010中,新增了自动属性、匿名类型等简化代码的特性。 2. **类与对象**:C#的核心是面向对象编程,包括类的定义、继承、封装、多态等概念。C# 2010支持泛型,使得代码更具有通用性,同时提高了性能。 3. **...