使用Grails服务上传照片

时间:2014-01-22 14:27:56

标签: scope image-uploading grails-2.0 grails-services

我想问一下,Grails中上传照片服务的最合适范围是什么?我在我的Grails 2.3.4网络应用程序中创建了这个PhotoService,它只是获取request.getFile(“myfile”)并执行必要的步骤,以便在用户想要上传图像时将其保存在硬盘驱动器上。为了说明它的样子,我给出了这些类的骨架。

PhotoPageController {

    def photoService

    def upload(){
       ...
       photoService.upload(request.getFile("myfile"))
       ...
    }
}

PhotoService{

     static scope="request"
     def upload(def myFile){
        ...
        // I do a bunch of task to save the photo 
        ...
     }
}

上面的代码不是确切的代码,我只想展示流程。但我的问题是:

问题: 我找不到这些不同grails范围的确切定义,它们有一个单线解释,但我无法弄清楚请求范围是否意味着对控制器的每个请求都注入了一个bean,或者每次请求上传时控制器的动作?

思想: 基本上由于许多用户可能同时上传,因此使用单例范围不是一个好主意,因此我的选择将是原型或请求我猜。那么它们中哪一个运行良好,哪一个只在仅访问PhotoService时才创建?

我正在尝试最小化注入应用程序上下文的服务数量,并且只要Web应用程序处于活动状态就会保持不变,基本上我希望服务实例在Web应用程序生命周期中的某个时刻死亡或获取垃圾回收时间而不是在记忆中闲逛而没有用处。我正在考虑使其成为会话范围,因此当用户的会话终止时,服务也会被清理,但在某些情况下,用户可能不想上传任何照片,并且无缘无故地创建服务。

P.S:如果我在upload()中移动“def photoService”,那是否只会在调用上传请求时被注入?我假设可能会抛出异常,因为在Spring注入服务之前会有一段延迟,然后ref对def photoService将是n

1 个答案:

答案 0 :(得分:0)

我发现Singleton范围很好,因为我没有为每个请求/用户维护状态。只有当服务保持状态时,我们才能继续使用原型或其他合适的范围。如果您认为单例可能会导致意外行为,那么使用原型会更安全,但需要进行测试。