Spring boot ComponentScan excludeFIlters, not excluding

I have a SimpleTest :

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SimpleTestConfig.class)
public class SimpleTest {
    @Test
    public void test() {
        assertThat(true);
    }
}

and configuration for this test:

@SpringBootApplication
@ComponentScan(basePackageClasses = {
        SimpleTestConfig.class,
        Application.class
},
        excludeFilters = @ComponentScan.Filter(
                type = FilterType.ASSIGNABLE_TYPE,
                classes = Starter.class))
public class SimpleTestConfig {
}

I'm trying to exclude the starter class

package application.starters;

import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;

@Component
public class Starter {
    @PostConstruct
    public void init(){
        System.out.println("initializing");
    }
}

And the Application class looks like this:

package application;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import static org.springframework.boot.SpringApplication.run;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        run(Application.class, args);
    }
}

But for a very strange reason, the Starter class is still getting initialized.

Can someone explain why ComponentScan excludeFiltersmy class is not ruled out Starter?

+10
source share
3 answers

. Starter.class SimpleTestConfig, SimpleTestConfig Application, @ComponentScan Starter. ComponentScan , ComponentScan , . 2 ( ), .

- Starter:

import org.springframework.boot.test.mock.mockito.MockBean;

public class SimpleTest {
    @MockBean
    private Starter myTestBean;
    ...
}

Spring , @PostConstruct .

:

  • Application.class
  • Spring , @Profile("!TEST") Starter
  • Boot @ConditionalOn... Starter
+12

@SpringBootApplication, Spring : @, @EnableAutoConfiguration @ComponentScan .

( basePackages).

@SpringBootApplication(exclude= {Foo.class})
public class MySpringConfiguration {}
0

.

:

@SpringBootApplication()
@ComponentScan(excludeFilters=@Filter(type = FilterType.REGEX, pattern="com.wyn.applications.starter.Starter*"))
public class SimpleTestConfig {

}

.

.

0

All Articles