Jer*_*emy 10 grails spring dependency-injection grails-2.0
从我的控制器我想基于参数动态选择服务.
目前我有一个基本服务和一些其他服务,可以扩展这个基本服务.基于参数,我调用一个类,该类根据param创建一个bean名称,并最终调用以下内容:
import org.codehaus.groovy.grails.web.context.ServletContextHolder as SCH
import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes as GA
class Resolver {
def ctx
def getBean(String beanName) {
if(!ctx) {
ctx = SCH.servletContext.getAttribute(GA.APPLICATION_CONTEXT)
}
return ctx."${beanName}"
}
Run Code Online (Sandbox Code Playgroud)
}
这将返回我想要的服务.但是我觉得这样做很脏.有没有人有更好的方法来处理基于某些参数获取服务(或任何其他bean)?
谢谢.
Bur*_*ith 13
ctx."${beanName}"被添加到ApplicationContext元类中,所以你可以做类似的事情def userService = ctx.userService.它只是一个快捷方式,ctx.getBean('userService')因此您可以将代码更改为
return ctx.getBean(beanName)
Run Code Online (Sandbox Code Playgroud)
它会是一样的,但不那么神奇.
因为你是从控制器或服务中调用它,所以我会跳过这些ServletContextHolder东西并通过依赖注入grailsApplicationbean(def grailsApplication)并通过它来获取上下文def ctx = grailsApplication.mainContext.然后把它传递给这个助手类(记住Spring的大范例是依赖注入,而不是老派的依赖性拉动)然后它会简单
class Resolver {
def getBean(ctx, String beanName) {
ctx.getBean(beanName)
}
}
Run Code Online (Sandbox Code Playgroud)
但是它很简单,我根本不打扰帮助类:)
| 归档时间: |
|
| 查看次数: |
2045 次 |
| 最近记录: |