2016-12-20 11 views
5

Jak wykluczyć niektóre ziarna z ładowania przy pomocy skanowania składników, w kontekście, w którym <import> z innego xml wymaga skanowania wszystkich pakietów. Działa Uwielbiiam jeśli kładę go do głównego kontekstu:Z wyłączeniem klas z kontekstu testowego

<context:component-scan base-package="com.main"> 
     <context:exclude-filter expression="com.main.*Controller" type="regex"/> 
</context:component-scan> 

Ale muszę kontrolerów Live środowiska.

Chciałbym wykluczyć ładowanie klasy kontrolera z kontekstu testu integracji. Jak można to osiągnąć?

Odpowiedz

3

Można użyć profili Sprężyna do tego (odniesienie How to set a Spring profile to a package?), za pomocą

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-2.5.xsd"> 
     <!-- define profile beans at the end of the configuration file --> 
    <beans profile="test"> 
    <context:component-scan base-package="com.main"> 
      <context:exclude-filter expression="com.main.*Controller" type="regex"/> 
    </context:component-scan> 
    </beans> 

    <beans profile="!test"> 
    <context:component-scan base-package="com.main"/> 
    </beans> 

i adnotacji test z konkretnym @ActiveProfile("test")

EDIT:

Jeśli xml nie definiuje <component:scan> tag, można kontrolować skanowanie pakietów z poziomu testu urządzenia za pomocą konfiguracji Java. Regulatory mogą być wyłączone z @ComponentScan excludeFilter następująco:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(loader = AnnotationConfigContextLoader.class) 
public class HelperTest { 

    @Configuration 
    @ComponentScan(basePackages = "yourPackage", 
      excludeFilters = @ComponentScan.Filter(value = Controller.class, type = FilterType.ANNOTATION)) 
    @ImportResource(locations = "classpath:context.xml") 
    static class TestConfiguration { 


    } 
+1

Nie chciałbym zmienić główny kontekst. Chciałbym powiedzieć, co wykluczyć w moim kontekście testu, jeśli to możliwe. :) –

+0

Poprawiłem odpowiedź, daj mi znać, jeśli pasuje. –