Spring从两个角度实现自动化装配:组件扫描 (Spring自动发现应用上下文中所创建的bean)自动装配(autowiring)自动满足bean之间的依赖
组件扫描:
package test.soundsystem;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import test.voice.Book;/* * 使用basePackageClasses,spring会自动扫描这些类所在的包, * 建议在包中写空标记接口,用来被扫描,有利于项目重构。 * * */@Configuration@ComponentScan(basePackageClasses={Book.class,CompactDisc.class})public class CDPlayerConfig {}
接口:
package test.soundsystem;public interface CompactDisc { void play();}
实现类:
package test.soundsystem;import javax.inject.Named;//Named 和 Component相似@Namedpublic class SgtPeppers implements CompactDisc { private String title="Sgt. Pepper's Lonely Hearts Club Band"; private String artist = "The Beatles"; public void play() { System.out.println("Playing "+title+" by "+artist); }}
测试类:
package test.soundsystem;import javax.inject.Inject;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;import test.voice.Book;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes=CDPlayerConfig.class)public class CDPlayerTest { @Autowired private CompactDisc cd; @Inject private Book book; @Test public void cdShouldNotBeNull(){ cd.play(); book.read(); }}