@ ComponentScan'ing包含过滤器的所有包的危险

时间:2014-05-02 22:34:51

标签: spring

我现在正在开发一个概念应用程序,我希望使用组件扫描在类路径的任何位置使用特定的自定义Spring元注释来获取所有类。我的注释看起来像:

@Target(value=ElementType.TYPE)
@Retention(value=RetentionPolicy.RUNTIME)
@Documented
@Controller
public @interface PluggableController {
    String value(); // Allows for the setting of the @Controller bean name
}

在我的ApplConfig课程中,我有:

@ComponentScan(basePackages = {"**"}, includeFilters = {@ComponentScan.Filter(type=FilterType.ANNOTATION, value=PluggableController.class)})

这个想法是用户将使用我的自定义@Controller创建一个控制器,它将被Spring自动拾取并像其他任何Spring控制器一样处理。但是,我不想强​​迫人们使用严格的类路径结构。

我很清楚扫描所有类路径的危险(启动速度,拾取不良依赖关系等),但问题是我是通过限制/过滤到特定注释来减轻这些危险吗?我并不过分担心启动速度,主要是关注遇到我没有预料到的问题。

1 个答案:

答案 0 :(得分:1)

您不会通过限制/过滤到特定注释来减轻这些危险。 Spring将扫描类路径中所有jar的所有类,并检查每个类的注释。

大多数插件系统都要求您将插件代码放入一个定义明确的位置,因此我强烈建议您在此处执行相同的操作。