Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系。它提供了三种主要的装配机制。
- 在XML中进行显示装配
- 在Java中进行显示装配
- 隐式的bean发现机制和自动装配
- 自动装配
- 组件扫描(component scanning):Spring会自动发现应用上下文所创建的bean
- 自动装配(autowiring):Spring自动满足bean之间的依赖
实例:
组件类:
package cn.barathrum;
import org.springframework.stereotype.Component;
@Component//该注解表明该类会作为组件类,并告知Spring要为这个类创建bean
class SgtPeppers implements CompactDisc{
private String title = "Sqt. Pepper's Lonely Hearts Club Band";
private String artist = "The Beatles";
public void play(){
System.out.print("play "+title+" by "+artist);
}
}
配置类:
package cn.barathrum;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration//定义Spring装配规则
@ComponentScan//这个注解能够在Spring中启动组件扫描
public class CDPlayerConfig {
}
通过为bean添加注解实现自动装配
package cn.barathrum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class CDPlayer implements MediaPlayer {
private CompactDisc cd;
@Autowired
public CDPlayer(CompactDisc cd) {
this.cd = cd;
}
public void play() {
cd.play();
}
}
这里,可以为组件扫描的bean命名,例如@Component("Alias")
设置组件扫描的基础包,如果我们没有为@ComponentScan设置任何属性,它会按照默认规则以装配类所在的包作为基础包来扫面组件,如果你想指定不同的基础包或者想扫描多个基础包,你可以在@ComponentScan的value属性指定包的名称。
如:@ComponentScan("pacjage")//指定单个基础包 ,这里也可以这样写 @ComponentScan(basePackages="package")
@ComponentScan(basePackages={"package`","package2"})