package soundsystem;
public interface CompactDisc {
void play();
}
//带有@Component注解的CompactDisc实现类SgtPeppers
package soundsystem;
@Component
public class SgtPeppers implements CompactDisc {
private String title = "SgtPeppers";
private String artist = "The Beatles";
public void play() {
System.out.println("playing" + title + "by" + artist);
}
}
//@ComponentScan注解启动了组件扫描
package soundsystem;
@Configuration
@ComponentScan
public class CDPlayerConfig {
}
//测试组件扫描能够发现CompactDisc
package soundsystem;
@RunWith(SpringJunit4ClassRunner.class)
@ConttextConfiguration(class=CDPlayerConfig.class)
public class CDPlayererTest {
@Autowired
private CompactDisc cd;
@Test
public void cdShouldNotBeNull() {
assertNotNull(cd);
}
}
“CDPlayerConfig类并没有显式地声明任何bean,只不过它使用了@ComponentScan注解,这个注解能够在Spring中启用组件扫描。如果没有其他配置的话,@ComponentScan默认会扫描与配置类相同的包。因为CDPlayerConfig类位于soundsystem包中,因此Spring将会扫描这个包以及这个包下的所有子包,查找带有@Component注解的类。这样的话,就能发现CompactDisc,并且会在Spring中自动为其创建一个bean。”
摘录来自: [美] Craig Walls. “Spring实战(第4版)”。 iBooks.