通过XMl 装配Bean
声明一个简单的bean
要在基于xml的Spring 配置中声明一个bean,需要使用 标签。bean 标签类似于JavaConfig 中的@Bean注解。
<bean id="compactDisc" class="Bean.AutoBean.SgtPeppers"></bean>
这里声明了一个简单的bean,创建这个bean的类通过class 属性来指定,并且要使用全限定的类名。
通过id 可以为bean 设置名字。
借助构造器注入初始化bean
在Spring XML配置中,只有一种声明bean的方式;使用bean 标签并指定class 属性。Spring 会从这里获取必要的信息来创建bean.
借助构造器注入bean,有两种可选的方案
- constructor-arg 元素
使用Spring3.0 引入的c-命名空间
构造器注入bean 引用
按照现在的定义,CDPlayer bean 有一个接受CompactDisc 类型的构造器。之前已经声明了一个SgtPeppers bean,并且SgtPeppers 类实现了CompactDisc接口,所有实际上就有了一个可以注入到CDPlayer bean 的bean.
@Component
public class CDPlayer implements MediaPlayer {
private CompactDisc cd;
@Autowired
public CDPlayer(CompactDisc cd) {
this.cd = cd;
}
@Override
public void play() {
System.out.println("CDPlayer");
cd.play();
}
}
<bean id="compactDisc" class="Bean.AutoBean.SgtPeppers"></bean>
<bean id="cdPlayer" class="Bean.AutoBean.CDPlayer">
<constructor-arg ref="compactDisc"/>
</bean>
当Spring 遇到这个bean 标签的时候,他会创建一个CDPlayer 的实例。constructor-arg
元素会告知Spring 要将一个ID为compactDisc 的bean 引用传递到CDPlayer的构造器中。
将字面量注入到构造器中
示例代码:
public class BlankDisc implements CompactDisc {
private String title;
private String artist;
public BlankDisc(String title, String artist) {
this.title = title;
this.artist = artist;
}
@Override
public void play() {
}
}
<bean id="blankDisc" class="Bean.AutoBean.BlankDisc">
<constructor-arg value="title"/>
<constructor-arg value="artist"/>
</bean>
通过使用vlue 属性将给定的值以字面量的形式注入到构造器之中。
将集合注入到构造器中
示例代码
public class BlankDisc implements CompactDisc {
private String title;
private String artist;
private List<String> tracks;
public BlankDisc(String title, String artist, List<String> tracks) {
this.title = title;
this.artist = artist;
this.tracks = tracks;
}
@Override
public void play() {
}
}
<bean id="blankDisc" class="Bean.AutoBean.BlankDisc">
<constructor-arg value="title"/>
<constructor-arg value="artist"/>
<constructor-arg>
<list>
<value>track1</value>
<value>track2</value>
</list>
</constructor-arg>
</bean>
list 元素是constructor-arg 的子元素,这表明一个包含值得列表将会被传递给构造器中,与list 对应的还有set.
设置属性
与通过构造器注入初始化bean 对应的还有的一种是使用属性的setter 方法, property
元素为属性的Setter 方法所提供的功能与constructor-arg
元素为构造器所提供的功能是一样的。