Spring系列——@ContextConfiguration注解的使用

1.概述

@ContextConfiguration这个注解通常与@RunWith(SpringJUnit4ClassRunner.class)联合使用用来测试

当一个类添加了注解@Component,那么他就自动变成了一个bean,就不需要再Spring配置文件中显示的配置了。把这些bean收集起来通常有两种方式,Java的方式和XML的方式。当这些bean收集起来之后,当我们想要在某个测试类使用@Autowired注解来引入这些收集起来的bean时,只需要给这个测试类添加@ContextConfiguration注解来标注我们想要导入这个测试类的某些bean。

1.1 xml方式




    <context:component-scan base-package="com" />
beans>

这个XML文件通过标签将com包下的bean全都自动扫描进来。

下面我们就可以测试了。

一般这么写:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:/*.xml"})
public class CDPlayerTest {

}

@ContextConfiguration括号里的locations = {"classpath*:/*.xml"}就表示将class路径里的所有.xml文件都包括进来,那么刚刚创建的那么XML文件就会包括进来,那么里面自动扫描的bean就都可以拿到了,此时就可以在测试类中使用@Autowired注解来获取之前自动扫描包下的所有bean

classpath和classpath*区别:

  • classpath:只会到你的class路径中查找找文件。

  • classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找。

1.2 注解方式

如果使用Java的方式就会很简单了,我们就不用写XML那么繁琐的文件了,我们可以创建一个Java类来代替XML文件,只需要在这个类上面加上@Configuration注解,然后再加上@ComponentScan注解就开启了自动扫描,如果注解没有写括号里面的东西,@ComponentScan默认会扫描与配置类相同的包。

@Configuration
@ComponentScan("com.viagra.synchronous")
public class SynchronousSpringEventsConfig {
}

此时如果想要测试的话,就可以这么写:


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { SynchronousSpringEventsConfig.class }, loader = AnnotationConfigContextLoader.class)
public class SynchronousCustomSpringEventsIntegrationTest {
    @Autowired
    private CustomSpringEventPublisher publisher;
    @Autowired
    private AnnotationDrivenEventListener listener;

    @Test
    public void testCustomSpringEvents() {
        isTrue(!listener.isHitCustomEventHandler(), "The value should be false");
        publisher.publishEvent("Hello world!!");
        System.out.println("Done publishing synchronous custom event. ");
        isTrue(listener.isHitCustomEventHandler(), "Now the value should be changed to true");
    }
}

你可能感兴趣的:(Spring系列,Spring)