我在 grails 3.1.10 插件的 src/groovy/my/package 中声明了几个 @Component,并通过在 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 应用程序组件扫描的正确方法是什么?
最佳答案
自定义组件应该在插件声明(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 中的应用程序类仅当插件在主应用程序上下文之外独立运行时才运行。
关于spring - 在 Grails 3 中将包添加到组件扫描的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41024217/