2.1 Spring配置的可选方案
主要有三种:
a)在xml中进行显式配置;
b)在java中进行显式配置;
c)隐式的bean发现机制和自动装配;
并没有规定说一定要用某一种方案,三种方案根据情况以及个人喜好而决定,也可以混合使用。但推进:尽可能使用自动配置的机制。显式配置越少越好。但当你必须使用显式配置的时候,推荐使用类型安全并且比xml更加强大的JavaConfig.最后只有当你想要使用便利的xml命名空间,并且在JavaConfig中没有同样的实现时才应该使用xml.
2.2 自动化装配bean.
spring从两个角度来实现自动化装配:
1.组件扫描(component scanning):spring会自动发现应用上下文所创建的bean.
2.自动装配(autowiring):spring自动满足spring之间的依赖。
定义CD的一个接口以及带有@Component注解的CompactDisc实现类SgtPeppers:
package ssoundsystem;
public interface CompactDisc{
void play();
}package soundsystem;
import org.springframework.stereotype.Component;
@Component
public class SgtPeppers implements CompactDisc {
private String title = "Sgt. Peppert's Lonely Hearts Club Band";
private String artist = "The Beatles";
public void play() {
// TODO Auto-generated method stub
System.out.println("Playing "+title+" by "+artist);
}
}
定义一个java配置类以及xml配置文件,用于自动扫描组件。
package soundsystem;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration //使用java配置类
@ComponentScan(basePackages={"soundsystem"})//多个可用逗号隔开,不写这个默认当前包
//@ComponentScan(basePackageClasses{CDPlayer.class}) 已类所在的包为基础包,多个可用逗号分开
public class CDPlayerConfig {
}
package soundsystem;
public interface MediaPlayer {
void play();
}package soundsystem;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component("aa")
public class CDPlayer implements MediaPlayer {
//@Autowired
private CompactDisc cd;
@Autowired
public CDPlayer(CompactDisc cd){
System.out.println("CDPlayer");
this.cd = cd;
}
public void play() {
// TODO Auto-generated method stub
cd.play();
}
@Autowired
public void insertCd(CompactDisc cd){
System.out.println("insertCd");
this.cd = cd;
}
}package soundsystem;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)
public class CDPlayerTest {
@Autowired
private CompactDisc cd;
@Autowired
private MediaPlayer player;
@Test
public void cdShouldNotBeNull(){
cd.play();
}
@Test
public void testPlay(){
player.play();
}
}