2016-12-20 4 views
5

Wie einige Beans vom Laden mit Component-Scan ausgeschlossen werden, in einem Kontext, in dem <import> von einem anderen xml, die alle Pakete scannen muss. Dies funktioniert nicly wenn ich es Haupt-Kontext gestellt:Ausschließen von Klassen aus dem Testkontext

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

Aber ich brauche Controller in Live-Umgebung.

Ich möchte Controller-Laden von meinem Integrationstest Kontext ausschließen. Wie wäre es möglich, dies zu erreichen?

Antwort

3

könnten Sie Federprofile verwenden für diese (Referenz How to set a Spring profile to a package?), von

<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> 

verwenden und mit Anmerkungen versehen Test mit dem spezifischen @ActiveProfile("test")

EDIT:

Wenn Ihr xml definiert nicht ein <component:scan> Tag, das Sie Paketscan von Ihrem Komponententest steuern können, indem Sie Java-Konfiguration verwenden. Die Regler können dann mit dem @ComponentScan excludeFilter ausgeschlossen werden, wie folgt:

@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

Ich würde nicht den Haupt-Kontext ändern möchten. Ich würde gerne sagen, was in meinem Testkontext auszuschließen ist, wenn möglich. :) –

+0

Ich habe die Antwort aktualisiert, lassen Sie mich wissen, ob es passt. –

Verwandte Themen