1.0 自动化装配Bean
Spring配置可选方案:
装配是依赖注入DI的本质,Spring提供了以下三种注入的装配机制:
- 在XMl中进行显式配置
- 在java中进行显式配置
- 隐式的Bean发现机制和自动装配
自动化装配Bean:
Spring从两个角度来实现自动化装配:
- 组件扫描(component scanning):Spring会自动发现用用上下文中所创建的Bean.
- 自动装配(autowiring):Spring自动满足bean之间的依赖.
实例:
CD和CDPlayer,如果你不将CD放入(注入)到播放器中,那么CD播放器其实是没多大用处的,所以说,CD播放器是依赖于CD才能完成它的使命.
package com.CDDemo; //CD的接口 public interface CompactDisc { public void play(); }
package com.CDDemo; import org.springframework.stereotype.Component; //CD的实现类 歌曲 @Component public class SgtPeppers implements CompactDisc { private String title = "sgt"; private String song = "Twinkle, twinkle, little start"; public void play() { System.out.println("title:" + title + "song:" + song); } }
package com.CDDemo; import org.springframework.stereotype.Component; //CD的实现类 歌曲 @Component public class SgtPeppers implements CompactDisc { private String title = "sgt"; private String song = "Twinkle, twinkle, little start"; public void play() { System.out.println("title:" + title + "song:" + song); } }
package com.CDDemo; //测试类 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 static org.junit.Assert.assertNotNull; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = CDPlayerConfig.class) public class CDTest { @Autowired private CompactDisc cd; @Test public void cdShouldNotBeNull() { assertNotNull(cd); cd.play(); } }
上面需要注意的是:
@Configuration
定义了Spring的装配规则
@ComponentScan
这个会默认扫描与配置类相同的包.(这里扫描package com.CDDemo;同包以及下面的所有的子包)
查找出带有@Component注解的类 这样就能发现CompactDisc(因为注解了它的实例) 并为它在Spring中创建一个Bean.
当然你也可以通过配置XML的方式来启用组件扫描: