我在Grails 2.3.7上创建了一个简单的应用程序,以便能够显示我的问题。
我在整个应用程序中只创建了一个控制器和一个服务。这是我的TestController.groovy:
package testsession
class TestController {
def testingsessionServiceProxy
def index() {
println testingsessionServiceProxy.getSomeVariable()
}
}
My TestingsessionService.groovy:
package testsession
import grails.transaction.Transactional
@Transactional
class TestingsessionService {
static scope="session"
static proxy=true
def somevariable=false
def getSomeVariable() {
somevariable
}
}
在运行此应用程序时,我在TestController.groovy中为testssessionServiceProxy获取null。请参见下面的曲目:
....Error
|
2015-04-02 18:09:28,122 [http-bio-8080-exec-7] ERROR errors.GrailsExceptionResolver - NullPointerException occurred when processing request: [GET] /TestSession/test/index
Cannot invoke method getSomeVariable() on null object. Stacktrace follows:
Message: Cannot invoke method getSomeVariable() on null object
Line | Method
->> 6 | index in testsession.TestController
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 200 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter
| 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run in java.lang.Thread
答案 0 :(得分:1)
据我所知,此功能计划在Grails 3.1中实现。看一下这张票:GRAILS-5701。
但您可以通过在resources.groovy
中定义代理手动创建代理,如下所示:
testingsessionServiceProxy(ScopedProxyFactoryBean) {
targetBeanName = 'TestingsessionService'
proxyTargetClass = true
}
查看描述问题的this article。还有plugin提供此功能,但我还没有测试过它。
答案 1 :(得分:0)
您的实际服务有一些是TestingsessionService,但您注入了..
def testingsessionServiceProxy
尝试注入并在
中寻找值def testingsessionService
接着是
testingsessionService.getSomeVariable()
你也有@Transactional,它适用于整个类,但你做的没有数据库工作,只有这样才能使用它,如果除了数据库工作之外什么都不做,或者按照实际需要的服务定义设置它它