如何在<import>
来自另一个需要扫描所有包的xml
的上下文中,使用component-scan排除某些bean。
如果我把它放在主要的上下文中,这很有效:
<context:component-scan base-package="com.main">
<context:exclude-filter expression="com.main.*Controller" type="regex"/>
</context:component-scan>
但我需要在现场环境中使用控制器。
我想从集成测试上下文中排除控制器类加载。怎么可能实现这个目标?
答案 0 :(得分:4)
您可以使用
使用弹簧配置文件(参考How to set a Spring profile to a package?) <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>
并使用特定的@ActiveProfile("test")
编辑:
如果您的xml没有定义<component:scan>
标记,则可以使用java配置从单元测试中控制包扫描。
然后可以使用@ComponentScan
excludeFilter排除控制器,如下所示:
@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 {
}