在Grails 3中将包添加到组件扫描的正确方法

时间:2016-12-07 17:58:06

标签: spring grails spring-boot grails-plugin grails-3.1

我在grails 3.1.10插件的src / groovy / my / package中声明了几个@Components,并通过在grails-app / init / application.groovy中添加以下内容将包名添加到组件扫描中:

 @Override
Collection<String> packageNames() {
    super.packageNames() + ['package.from.plugin']
}

只要我运行插件本身就可以正常工作。当我通过在我的应用程序的build.gradle中添加插件来包含我的插件时:

compile project(':my-plugin')

并运行应用程序,my-plugin中声明的bean不再正常连接,无法找到它们。

将Grails插件中的自定义组件/ Bean添加到Grails应用程序组件扫描的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

自定义组件应该在插件声明中声明(在src / base.package里面的pluginName.groovy)

Closure doWithSpring() {{->
    xmlns context:"http://www.springframework.org/schema/context"


    context.'component-scan'('base-package': 'your.package') {
        context.'include-filter'(
                type:       'annotation',
                expression: Component.canonicalName)
    }
}}

这将使你在.package中使用注释声明的所有组件在spring上下文中也可用,也可以在主应用程序中使用。

grails-app / conf / init / application.groovy中的应用程序类只有在主应用程序上下文之外独立运行插件时才会运行。