使用@ComponentScan或<context:component-scan>只使用一个类</context:component-scan>

时间:2014-01-09 13:52:02

标签: spring spring-mvc component-scan

我正在维护一个包含两组主程序包的项目,该项目使用的是Spring和Spring MVC,其中一个程序包包含多个控制器,并使用XML配置进行扫描(<context:component-scan />)。

问题是另一个包中有一个类(未扫描),我需要扫描这个类,但只需要这个类,而不是包中的其他类。我现在无法改变它的包装,因为它现在风险太大了。

有没有办法使用注释或XML?

来完成此操作

4 个答案:

答案 0 :(得分:51)

@Bart对XML的说法。

如果您需要使用注释引入该类,请将以下内容添加到@Configuration个类之一

@ComponentScan(
    basePackageClasses = YourClass.class, 
    useDefaultFilters = false,
    includeFilters = {
        @ComponentScan.Filter(type = ASSIGNABLE_TYPE, value = YourClass.class)
    })

答案 1 :(得分:20)

简单地添加就像你的上下文中的bean一样。

<bean class="my.package.MyClass" />

答案 2 :(得分:0)

除了Emerson Farrugia所描述的方法外,从Spring Framework 4.2 as mentioned in the documentation here开始就已经支持了一种较为简单的解决方案。

  

从Spring Framework 4.2开始,@Import还支持常规引用   组件类,类似于   AnnotationConfigApplicationContext.register方法。这是   如果要避免使用以下方法扫描组件,此功能特别有用   一些配置类作为切入点,以明确定义所有   您的组件。

因此您的示例将变成:

@Import(YourClass.class)

答案 3 :(得分:-4)

您需要使用过滤器来过滤掉其他类,并且只需要包含您要扫描的类

<context:component-scan base-package="com.abc" >

    <context:include-filter type="regex" 
                   expression="com.abc.customer.dao.*DAO.*" /> 

</context:component-scan>