创建应用组件之间协作的行为通常称为装配【wiring】。Spring有多种装配Bean的方式,采用XML是很常见的一种装配方式。
下面展现了一个简单的Spring配置文件:骑士.xml,该配置文件将勇敢的骑士、屠龙任务和 PrintStream 装配到了一起。
pom
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.0.7.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.7.RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
代码
任务接口
public interface I任务 {
void 执行();
}
任务实现
import java.io.PrintStream;
public class 屠龙任务 implements I任务 {
private PrintStream stream;
public 屠龙任务(PrintStream stream) {
this.stream = stream;
}
public void 执行() {
stream.println("踏上屠龙的征程!");
}
}
骑士接口
public interface I骑士 {
void 执行任务();
}
骑士实现
public class 勇敢的骑士 implements I骑士 {
private I任务 任务;
public 勇敢的骑士(I任务 任务) {
this.任务 = 任务;
}
public void 执行任务() {
任务.执行();
}
}
xml配置
src/main/resources/META-INF/spring/骑士.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 使用Spring将 `屠龙任务` 注入到`勇敢的骑士`中 -->
<bean id="骑士" class="勇敢的骑士">
<constructor-arg ref="任务" />
</bean>
<bean id="任务" class="屠龙任务">
<constructor-arg value="#{T(System).out}" />
</bean>
</beans>
在这里,勇敢的骑士和 屠龙任务 被声明为Spring中的 Bean。
就勇敢的骑士Bean来讲,它在构造时传入了对屠龙任务Bean的引用,将其作为构造器参数。
<constructor-arg ref="任务" />
同时,屠龙任务 Bean的声明使用了Spring Expression Language ,将System.out 传入到了屠龙任务的构造器中。
<constructor-arg value="#{T(System).out}" />
main
import org.springframework.context.support.
ClassPathXmlApplicationContext;
// KnightMain.java 加载包含 骑士 的Spring上下文
public class 骑士Main {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext(
"META-INF/spring/骑士.xml");
I骑士 某骑士 = context.getBean(I骑士.class);
某骑士.执行任务();
context.close();
}
}
全部的代码可以在以下位置找到
https://gitee.com/virhuiai/spring-wiring-example/tree/master/自动装配之xml
参照自Spring in Action 4的例子
本文暂时没有评论,来添加一个吧(●'◡'●)