我正在维护一个包含两组主要包的项目,该项目使用 Spring 和 Spring MVC,其中一个包包含多个控制器并使用 XML 配置 ( <context:component-scan />
) 进行扫描。
问题是另一个包中只有一个类(未扫描),我需要扫描这个类,但只有这个类,包中没有其他内容。我现在不能改变它的包裹,因为现在风险太大了。
那么有没有办法使用注释或 XML 来做到这一点?
我正在维护一个包含两组主要包的项目,该项目使用 Spring 和 Spring MVC,其中一个包包含多个控制器并使用 XML 配置 ( <context:component-scan />
) 进行扫描。
问题是另一个包中只有一个类(未扫描),我需要扫描这个类,但只有这个类,包中没有其他内容。我现在不能改变它的包裹,因为现在风险太大了。
那么有没有办法使用注释或 XML 来做到这一点?
@Bart 对 XML 的评价。
如果您需要使用注释引入该类,请将以下内容添加到您的@Configuration
类之一
@ComponentScan(
basePackageClasses = YourClass.class,
useDefaultFilters = false,
includeFilters = {
@ComponentScan.Filter(type = ASSIGNABLE_TYPE, value = YourClass.class)
})
只需将 is 作为 bean 添加到您的上下文中,例如
<bean class="my.package.MyClass" />
除了 Emerson Farrugia 描述的方法之外,还有一个从 Spring Framework 4.2 开始支持的不太冗长的解决方案,如此处的文档中所述。
从 Spring Framework 4.2 开始,
@Import
也支持引用常规组件类,类似于AnnotationConfigApplicationContext.register
方法。如果您想通过使用一些配置类作为入口点来显式定义所有组件来避免组件扫描,这将特别有用。
因此,您的示例将简单地变为:
@Import(YourClass.class)
您需要使用过滤器来过滤掉其他类,只包括您要扫描的类
<context:component-scan base-package="com.abc" >
<context:include-filter type="regex"
expression="com.abc.customer.dao.*DAO.*" />
</context:component-scan>