? ? ? ?Spring容器负责创建应用程序中的Bean,并通过DI(依赖注入)来协调这些对象之间的关系。创建应用组件之间协作的行为通常称为装配。在Spring中,对象无需自己创建或者查找与其所关联的其他对象。
spring装配方式
Spring容器负责创建bean,并通过DI来协调对象之间的依赖关系,对于开发而言,需要告诉Spring哪些bean需要创建并且如何将其装配在一起。Spring提供如下三种主要的装配方式:
- XML中进行显式的配置
- 在java中进行显式的配置
- 隐式的进行bean发现机制以及自动装配
1. 自动化装配bean
? ? ?Spring从两个角度实现自动化装配:
- ?组件扫描:Spring会自动发现应用上下文中所创建的bean
- ?自动装配:Spring自动满足bean之间的依赖
? ?下面通过案例说明组件扫描和装配。
? ?接口:
package com.spring.demo;
/**
* animal
*/
public interface Animal {
/**
* eat
*/
void eat();
}
??Animal接口的实现类:
package com.spring.demo;
import org.springframework.stereotype.Component;
@Component
public class Cat implements Animal{
@Override
public void eat() {
System.out.println(" cat is eating !");
}
}
? 实现类中使用了@Component注解,表明该类会作为主键类,并告知spring要为这个类创建bean,不过,组件扫描默认是不启动的,需要显示的配置,并去寻找带有@Component注解的类,并创建bean。
? 可使用@ComponentScan注解开启扫描。当@ComponentScan没有配置参数的时候,默认扫当前配置类相同的包,因此Spring将会扫描这个包以及其子包,查找带有@ComponentScan注解的类。
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan
public class AnimalConfig {
}
?@ComponentScan 也可用XML配置,等同于
<context:component-scan base-package = "com.test">
?下面使用junit进行单元测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AnimalConfig.class)
public class AnimalTest {
@Autowired
private Cat cat;
@Test
public void catNotBeNull(){
assertNotNull(cat);
cat.eat();
}
}
这个bean会被注册进来。
AnimalTest 使用了spring的SpringJUnit4ClassRunner,以便在测试开始的时候自动创建spring的应用上下文,@RunWith就是一个运行器,让测试运行于Spring环境。@ContextConfiguration注解会告诉加载哪些注解,可以是类也可以是配置信息路径。
以上已测试完成组件扫描
|