Grails 自定义插件-在战争中部署时不向控制器注入bean

Grails 自定义插件-在战争中部署时不向控制器注入bean,grails,grails-plugin,Grails,Grails Plugin,我写的插件有问题。我有一个类,它以编程方式构建要注入Spring的“bean引用”。bean正在被注入,但当部署到WAR中时,它们在控制器/服务中不可用。除非我使用grailsApplication.mainContext.getBean'beanName',否则使用run app似乎可以正常工作 我的GrailsPlugin文件的一个片段如下所示,我在这里对其进行了轻微的修改,因此任何语法错误都是一种误导: def loadAfter = ['controllers', 'domains',

我写的插件有问题。我有一个类,它以编程方式构建要注入Spring的“bean引用”。bean正在被注入,但当部署到WAR中时,它们在控制器/服务中不可用。除非我使用grailsApplication.mainContext.getBean'beanName',否则使用run app似乎可以正常工作

我的GrailsPlugin文件的一个片段如下所示,我在这里对其进行了轻微的修改,因此任何语法错误都是一种误导:

def loadAfter = ['controllers', 'domains', 'services']

def doWithSpring = {
  beanDefinitionBuilder(BeanDefinitionBuilder, ref('classLoader'), application)
}  

def doWithApplicationContext = { ctx ->
  BeanDefinitionBuilder builder = ctx.beanDefinitionBuilder
  def beans = beans {
    for (String myBean : builder.getBeanNames()) {                  
        "${myBean}"(builder:"getService") { bean ->
          bean.autowire = 'byName'
        }
    }
  }
  beans.registerBeans(ctx)
}

有人知道为什么这对run应用程序有效,但对战争无效,或者如果我所做的是完全错误的,我应该采取什么方法来代替。我最初在“doWithSpring”块中有完整的代码,但我需要加载资源,因此我需要通过实现ResourceLoaderware提供ResourceLoader。

我们遇到了一些问题,应用程序作为部署的war文件与通过运行应用程序表现不同。罪魁祸首是分叉编译,我们通过编辑BuildConfig.groovy关闭了分叉编译,因此:


我不确定对Grails应用程序的其余部分执行此操作的后果,因为我不负责更改,所以YMMV。

我设法解决了我的问题。我确实尝试了nickdos上面提到的方法,但没有成功。相反,我设法解决了war中的资源加载问题,并将spring注入代码移到了“doWithSpring”闭包中。现在,在测试环境和战争中使用run app时,它可以正确注入

grails.project.fork = [
    test: false,
    run: false,
    war: false,
    console: false
]