Spring中bean的装配有三种配置方式,我们应该尽可能的使用自动装配的机制,显示配置越少越好。
自动装配要用到的注解:
@Component 表明该类为组件类,并告知Spring要为这个类创建bean。
@Autowired 根据类型,为成员变量、构造方法或其他方法自动装配bean。
@ComponentScan 在Spring中启用自动扫描
下面通过代码来说明这几个注解的用法:
组件类:
package com.yykj.soundsystem;
import org.springframework.stereotype.Component;
@Component("sgt")//括号内为组件名,可以不写,默认为类名小写首字母
public class Mayday implements CompactDisc {
public void play(){
System.out.print("Play");
}
}
Java配置类:
package com.yykj.soundsystem.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "com.yykj.soundsystem")//自动扫描的基础包
public class CDPlayerConfig {
}
单元测试类:
package com.yykj.soundsystem;
import com.yykj.soundsystem.config.CDPlayerConfig;
import org.junit.*;
import org.junit.contrib.java.lang.system.StandardOutputStreamLog;
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(value=SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDPlayerConfig.class)
public class CDPlayerTest {
@Rule
public final StandardOutputStreamLog log = new StandardOutputStreamLog();
@Autowired
private CompactDisc cd;
@Autowired
private MediaPlayer player;
@Test
public void cdShouldNotBeNull(){
Assert.assertNotNull(cd);
}
@Test
public void TestPlay(){
player.play();
Assert.assertEquals(log.getLog(), "Play");
}
}