@ContextConfiguration注解


原文鏈接:https://www.cnblogs.com/bihanghang/p/10023759.html

@ContextConfiguration這個注解通常與@RunWith(SpringJUnit4ClassRunner.class)聯合使用用來測試

當一個類添加了注解@Component,那么他就自動變成了一個bean,就不需要再Spring配置文件中顯示的配置了。把這些bean收集起來通常有兩種方式,Java的方式和XML的方式。當這些bean收集起來之后,當我們想要在某個測試類使用@Autowired注解來引入這些收集起來的bean時,只需要給這個測試類添加@ContextConfiguration注解來標注我們想要導入這個測試類的某些bean。

 

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" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.1.xsd  >

    <!-- 自動掃描該包 -->
    <context:component-scan base-package="com" />
</beans>

這個XML文件通過<context:component-scan base-package="com" />標簽將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路徑)進行查找。

Java

如果使用Java的方式就會很簡單了,我們就不用寫XML那么繁瑣的文件了,我們可以創建一個Java類來代替XML文件,只需要在這個類上面加上@Configuration注解,然后再加上@ComponentScan注解就開啟了自動掃描,如果注解沒有寫括號里面的東西,@ComponentScan默認會掃描與配置類相同的包。

@Configuration
@ComponentScan
public class CDPlayConfig {

}

此時如果想要測試的話,就可以這么寫:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayConfig.class)
public class CDPlayerTest {

}

在Spring Boot測試

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class Test {
}

這個@SpringBootTest注解意思就是將SpringBoot主類中導入的bean全都包含進來。

此時SpringBoot主類也被當作了bean的收集器。類似上文的CDPlayConfig。

@SpringBootApplication
@SpringBootConfiguration
@ComponentScan(basePackages = {"com.bihang.*"})
public class CarOrderWebApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(CarOrderWebApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(CarOrderWebApplication.class, args);
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM