1. spring配置的可选方案
spring具有非常大的灵活性,它提供了3种主要的装配机制:
(1)在xml中进行显示配置
(2)在java中进行显示配置
(3)隐示的bean发现机制和自动装配
2. 自动化装配bean
spring从两个角度来实现自动化配置:
(1)组件扫描
spring会自动发现应用上下文中所创建的bean
(2)自动装配
spring自动满足bean之间的依赖
2.1 创建可被发现的bean
首先创建一个CD的接口:
public interface CompactDisc {
void play();
}
然后创建一个该接口的实现类:
@Component
public class SgtPappers implements CompactDisc {
private String title = "role in the deep";
private String artist = "dada";
public void play() {
System.out.println("playing " + title + " by " + artist);
}
}
可以看到,该类加了@Component注解,这个简单的注解表明该类会作为组件类,并告诉spring要为这个类创建bean。
接下来,我们创建一个组件扫描的配置类:
@Configuration
@ComponentScan
public class CDPlayerConfig {
}
可以看到,该类加了@ComponentScan注解,这个注解能够在spring中启用组件扫描。
然后,我们便可以创建一个JUint类来对上述代码进行测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDPlayerConfig.class)
public class Test {
@Autowired
private CompactDisc compactDisc;
@Test
public void test() {
compactDisc.play();
}
}
其中,SpringJUnit4ClassRunner会在测试开始时自动创建spring的应用上下文,而注解ContextConfiguration会自动加载配置。
2.2 为组件扫描的bean命名
spring应用上下文中所有的bean都会给定一个ID,如果没有显示的指定,则会将类名的第一个字母改为小写,作为该bean的ID。如果想要自定义ID,则只需要@Component(“dada”)即可。
2.3 设置组件扫描的基础包
为了指定不同的基础包,你只需要在@Component的value属性中指明包的名称。
除了将包设置为简单的String类型之外,@Component还提供了另外一种方法,那就是将其指定为包中所包含的类或接口。