【问题标题】:Grails 2.3 Error initializing the application: No bean named 'urlMappingsTargetSource' is definedGrails 2.3 初始化应用程序时出错:未定义名为“urlMappingsTargetSource”的 bean
【发布时间】:2023-03-13 02:54:02
【问题描述】:

我正在使用 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 吗?

在 Grails 2.3 与 Grails 2.2 或 2.1 中加载此 bean 的方式是否有所改变?

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

【问题讨论】:

标签: spring grails grails-2.3


【解决方案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 不会被初始化。 我将 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]
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    相关资源
    最近更新 更多