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

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

我在 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/

相关文章:

java - CORS 阻止我进行 API 调用

javascript - 如何在不提交的情况下调用spring Controller

security - 使用Acegi安全性以脚本级别登录Grails应用

grails - 在网址中隐藏ID

java - 无法使用网关 UI 将数据保存到 JHipster 微服务中

java - 如何在 spring 中提供测试数据源?

spring - Imports/Bean Refs 的属性占位符

mysql - grails 回滚数据库操作出现某些错误

java - 如何在 spring boot 中使用 @Async 和 @Scheduled 注解?

spring - 如何在gradle中获取依赖项的元数据?