在JavaConfig中引用XML配置
存在使用JavaConfig配置的bean类
@Configuration
public class CDPlayerConfig {
@Bean
public CompactDisc sgtPeppers(){
return new SgtPeppers();
}
@Bean
public CDPlayer cdplayer(CompactDisc cd){
return new CDPlayer(cd);
}
}
如果两个bean在一个配置类中多了,将其中一个CompactDisc的Bean创建使用另一个配置类
-- CompactDisc Bean
@Configuration
public class CDConfig {
@Bean
public CompactDisc sgtPeppers(){
return new SgtPeppers();
}
}
在原来的配置类中引入,上面这个配置类
-- CDPlayer Bean
@Configuration
@Import(value={CDConfig.class})
public class CDPlayerConfig {
@Bean
public CDPlayer cdplayer(CompactDisc cd){
return new CDPlayer(cd);
}
}
或者,将两个bean类都分离开来,最后在一个更高级的配置类中引入
@Configuration
@Import(value={CDConfig.class,CDPlayerConfig.class})
public class SoundSystemConfig {
}
假设,我们需要将CompactDisc的bean的创建配置到xml中,如下:
1
1
1
1
,那么在SoundSystemConfig中配置为
@Configuration
@Import(value={CDPlayerConfig.class})
@ImportResource(locations = "classpath:beans.xml")
public class SoundSystemConfig {
}
,两个Bean,定义在JavaConfig和Xml中的Bean最后都会加载到Spring容器中,最后整合Junit测试下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={SoundSystemConfig.class})
public class Mytest {
@Autowired
private CDPlayer cdplayer;
@Test
public void run(){
cdplayer.play();
}
public static void main(String[] args) {
/*ClassPathXmlApplicationContext xf = new ClassPathXmlApplicationContext("beans.xml");
CDPlayer te = (CDPlayer)xf.getBean("cdplayer");
te.play();*/
}
}
在XML配置中引用JavaConfig
在JavaConfig配置中,我们已经展现了如何使用@Import和@ImportResource来拆分JavaConfig类,
在XML中,可以使用import元素来拆分XML配置
1. 首先明确,CDConfig配置类,定义了CompactDiscBean
2. 在xml中定义CDPlayer的Bean,并引用CompactDisc的Bean如下
这样的结果就是,bean元素引入的是JavaConfig的Bean,XML中定义另一个Bean
当然,可以将XML中定义的Bean写在另一个xml并引入,在root的xml中一般会再加载扫描包和注解元素
,最后,也整合Junit进行测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:beans.xml")
public class Mytest {
@Autowired
private CDPlayer cdplayer;
@Test
public void run(){
cdplayer.play();
}
public static void main(String[] args) {
/*ClassPathXmlApplicationContext xf = new ClassPathXmlApplicationContext("beans.xml");
CDPlayer te = (CDPlayer)xf.getBean("cdplayer");
te.play();*/
}
}
最后,总结下Spring装载Bean的三种方式,Spring的核心是Spring容器
1. 自动装配,@Component和扫描包的元素完成Bean的创建,@AutoWire,@Inject完成注入
2. JavaConfig ,@Configuration完成配置类,配置类里面@Bean来定义Bean
3. XML里面Bean的创建,直接使用Bean元素引入