编程语言
首页 > 编程语言> > spring-Grails 2.3初始化应用程序时出错:未定义名为“ urlMappingsTargetSource”的bean

spring-Grails 2.3初始化应用程序时出错:未定义名为“ urlMappingsTargetSource”的bean

作者:互联网

我正在使用Grails 2.3.11.
在BootStrap.groovy中,我调用:

def ctx = servletContext.getAttribute(ApplicationAttributes.APPLICATION_CONTEXT)
HotSwappableTargetSource ts = ctx.getBean("urlMappingsTargetSource")

我收到了NoSuchBeanDefinitionException

12,09 21:55:44:084 [localhost-startStop-1] ERROR context.GrailsContextLoader - Error initializing the application: No bean named 'urlMappingsTargetSource' is defined
   org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'urlMappingsTargetSource' is defined
   at BootStrap$_closure1.doCall(BootStrap.groovy:10)
   at grails.util.Environment.evaluateEnvironmentSpecificBlock(Environment.java:308)
   at grails.util.Environment.executeForEnvironment(Environment.java:301)
   at grails.util.Environment.executeForCurrentEnvironment(Environment.java:277)
   at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
   at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
   at java.util.concurrent.FutureTask.run(FutureTask.java:166)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
   at java.lang.Thread.run(Thread.java:722)

在开发环境中运行应用程序时,这不会引发异常.但是,如果我构建一个war文件并部署到tomcat,则会收到org.springframework.beans.factory.NoSuchBeanDefinitionException

使用Grails 2.1.0和2.2.4时,此行可以正常工作.我也尝试过Grails 2.3.9,但这也会引发NoSuchBeanDefinitionException.

我也尝试使用依赖注入,但“ urlMappingsTargetSource”为空

class BootStrap {

    def urlMappingsTargetSource

是否有人遇到过这个问题,或者有人知道为什么我会收到NoSuchBeanDefinitionException吗?

是否有什么改变了该bean在Grails 2.3与Grails 2.2或2.1中加载的方式?

任何帮助或见解将不胜感激.

解决方法:

UrlMappingsGrailsPlugin.groovy包含以下代码

    if (Environment.isDevelopmentMode() || Environment.current.isReloadEnabled()) {
        "org.grails.internal.URL_MAPPINGS_HOLDER"(UrlMappingsHolderFactoryBean) { bean ->
            bean.lazyInit = true
        }

        urlMappingsTargetSource(HotSwappableTargetSource, ref("org.grails.internal.URL_MAPPINGS_HOLDER")) { bean ->
            bean.lazyInit = true
        }

        grailsUrlMappingsHolder(ProxyFactoryBean) { bean ->
            bean.lazyInit = true
            targetSource = urlMappingsTargetSource
            proxyInterfaces = [UrlMappings]
        }
    } else {
        grailsUrlMappingsHolder(UrlMappingsHolderFactoryBean) { bean ->
            bean.lazyInit = true
        }
    }

如果环境不是开发模式或启用了重新加载,则不会初始化bean.
我将这些豆添加到我的resources.groovy中,它起作用了

import org.codehaus.groovy.grails.web.mapping.UrlMappingsHolderFactoryBean
import org.springframework.aop.framework.ProxyFactoryBean
import org.springframework.aop.target.HotSwappableTargetSource

// Place your Spring DSL code here
beans = {
"org.grails.internal.URL_MAPPINGS_HOLDER"(UrlMappingsHolderFactoryBean) { bean ->
    bean.lazyInit = true
}

urlMappingsTargetSource(HotSwappableTargetSource, ref("org.grails.internal.URL_MAPPINGS_HOLDER")) { bean ->
    bean.lazyInit = true
}

grailsUrlMappingsHolder(ProxyFactoryBean) { bean ->
    bean.lazyInit = true
    targetSource = urlMappingsTargetSource
    proxyInterfaces = [org.codehaus.groovy.grails.web.mapping.UrlMappings]
}
}

标签:grails,grails-2-3,spring
来源: https://codeday.me/bug/20191121/2050502.html