Spring提供了三种主要的装配机制:
- 使用XML文件显示装配
- 在Java中进行显示装配
- 隐式的bean发现机制和自动装配机制
Demo:
使用XML文件显示装配
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--装配一个BraveKnight对象,并引用下面的quest作为构造器作为入参-->
<bean id="knight" class="sia.knights.BraveKnight">
<constructor-arg ref="quest" />
</bean>
<!--装配一个SlayDragonQuest对象,命名为quest-->
<bean id="quest" class="sia.knights.SlayDragonQuest">
<constructor-arg value="#{T(System).out}" />
</bean>
</beans>
在Java中进行显示装配(效果同上XML配置)
/**
* @Configuration 表示此类为Spring配置类
* 项目启动时,Spring会加载此类中的配置内容
*/
@Configuration
public class KnightConfig {
/**
* @Bean 将函数返回的对象作为一个Bean加载到Spring容器中
* @return
*/
@Bean
public Knight knight() {
return new BraveKnight(quest());
}
@Bean
public Quest quest() {
return new SlayDragonQuest(System.out);
}
}
隐式的bean发现和自动装配
需要使用组件扫描(component scan)和自动装配(auto wire)
/**
* @Component 告知Spring要为此类创建一个bean
*/
@Component
public 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);
}
}
/**
* @Configuration 表示这是一个配置类
* @ComponnentScan 表示开启Spring的组件扫描功能,并将bean装入spring容器中
*/
@Configuration
@ComponentScan
public class CDPlayerConfig {
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)
public class CDPlayerTest {
@Autowired
private CompactDisc cd; //将Spring容器中CompactDisc类的bean自动装配到cd
@Test
public void cdShouldNotBeNull() {
assertNotNull(cd);
}
}
//获取bean
@Test
public void getBeans(){
//ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
ApplicationContext context2 = new AnnotationConfigApplicationContext("unicom.com.unicom.kc.manage");
IKmKnwlgIndexSV kmKnwlgIndexSV2 = context2.getBean(IKmKnwlgIndexSV.class);
System.out.println(kmKnwlgIndexSV2);
}