Spring容器负责创建应用程序中的Bean,并通过DI(依赖注入)来协调这些对象之间的关系。创建应用组件之间协作的行为通常称为装配。在Spring中,对象无需自己创建或者查找与其所关联的其他对象。
Spring容器负责创建bean,并通过DI来协调对象之间的依赖关系,对于开发而言,需要告诉Spring哪些bean需要创建并且如何将其装配在一起。Spring提供如下三种主要的装配方式:
Spring从两个角度实现自动化装配:
下面通过案例说明组件扫描和装配。
接口:
- 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注解会告诉加载哪些注解,可以是类也可以是配置信息路径。
以上已测试完成组件扫描