grails - 动态设置 Grails 应用程序上下文?

标签 grails configuration groovy

我有一个在 Tomcat 下运行的 Grails 应用程序。由于各种原因,我必须能够动态更改应用程序上下文。也就是说,我希望能够(在登录时)设置
这个上下文。

我知道这可以通过 Config.groovy ,但这是静态的,因此在运行时设置。
在登录时,我得到一个参数,它是应用程序的上下文。

如何设置此上下文?

最佳答案

通常,您不需要在每次用户登录时更改应用程序上下文。 Spring Context 包含的对象通常与应用程序一样长,并且通常不依赖于用户。也许您希望扩展您的问题并解释您的情况,因为根据您到目前为止所说的内容,您似乎没有走在正确的轨道上。

在一个应用程序中,我们有不同的数据源,具体取决于用户所属的企业。即使这样,上下文也没有受到影响,只有用户 session 和一些干预 OpenSessionInView 过滤器。

如果出于某种原因,您需要以编程方式干预 Spring ApplicationContext,您可以通过 ApplicationContextAware 接口(interface)获取 Context 来实现。然后您可以操作上下文,例如添加新的 bean 定义、链上下文(参见 setParent)等。

您可以使用BeanDefinitionBuilder构造你的bean,然后调用
GenericApplicationContext 上的 registerBean 方法.

您可以通过使您的服务获得 ApplicationContext,例如 ApplicationContextAware。然后你可以从你的 Controller 调用 registerBean 方法。看看这段代码:

import org.springframework.context.ApplicationContext
import org.springframework.context.ApplicationContextAware
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory
import org.springframework.beans.factory.support.BeanDefinitionBuilder

class MyRedefiningService implements ApplicationContextAware {

def context

void setApplicationContext(ApplicationContext context) { 
    this.context = context
}

void registerBean(){
    BeanDefinitionBuilder builderA = BeanDefinitionBuilder
.rootBeanDefinition(DummyService.class)
    context.registerBeanDefinition("bean-a", builderA.getBeanDefinition());
    println context.getBean("bean-a");

    }
}

//controller class
class SomeController {

   def myRedefining

   def index = {
       myRedefining.registerBean()
   }

}

关于grails - 动态设置 Grails 应用程序上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1614335/

相关文章:

java - ASM MethodVisitor::visitMethodInsn 在读取枚举时获取描述符 - bug 或错误用法?

java - 在 Java 中使用 block 的 Groovy

grails - 如何访问 Grails 2.0 中的 Grails 配置?

javascript - "Autocomplete is not a function"JavaScript错误

hibernate - Grails条件在集成测试中不起作用

maven-jaxb2-plugin (maven) 生成的日期和时间

apache - 在 Apache 服务器上安装了 SSL,页面没有响应

grails - 从缺少概要文件的源安装了Grails发行版

Grails - 为什么 Controller 中抛出的异常不会停止执行,但服务中抛出的异常却会停止执行

c++ - Automake 变量整理 Makefile.am