2014-01-22 3 views
0

Я хотел бы спросить: что было бы наиболее подходящей областью для моей загрузки фотогалереи в Grails? Я создал этот PhotoService в своем веб-приложении Grails 2.3.4, все, что он делает, - это получить request.getFile («myfile») и выполнить необходимые шаги для его сохранения на жестком диске всякий раз, когда пользователь хочет загрузить изображение. Чтобы проиллюстрировать, как это выглядит, я даю скелет этих классов.Загрузка фотографий с использованием услуг Grails

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 
     ... 
    } 
} 

Код выше не является точным кодом, я просто хотел показать поток. Но у меня вопрос:

Вопрос: Я не смог найти точное определение этих различных областей грааля, у них есть пояснение по одному линейке, но я не мог понять, имеет ли область запроса для каждого запроса на контроллер один bean вводится или каждый раз, когда приходит запрос на загрузку действия контроллера?

Мысли: В принципе, поскольку многие пользователи могут загружать одновременно, это не очень хорошо использовать Singleton scope, поэтому мои варианты будут прототипом или запросом, я думаю. Итак, какой из них работает хорошо, а также который создается только при доступе к PhotoService?

Я пытаюсь свести к минимуму количество услуг, вводимых в контекст приложения, и остается до тех пор, пока веб-приложение остается в живых, в основном я хочу, чтобы экземпляр службы умереть или получить сбор мусора в какой-то момент во время веб-приложения а не повесить в памяти, в то время как для этого нет необходимости. Я думал о создании области сеанса, поэтому, когда сеанс пользователя прекращается, служба также очищается, но в некоторых случаях пользователь может не захотеть загружать какую-либо фотографию, и сервис создается без причины.

P.S: Если я перемещаю «def photoService» в upload(), делает ли это его только инъекцию при вызове запроса на загрузку? Я предполагаю, что это может вызвать исключение, потому что будет задержка до тех пор, пока Spring не добавит услугу, а затем ref для def photoService будет n

ответ

0

Я понял, что область Singleton будет прекрасной, поскольку я не поддерживаю состояние для каждого запрос/пользователь. Только если служба должна поддерживать состояние, тогда мы можем использовать прототип или другие подходящие области. Использование прототипа более безопасно, если вы считаете, что синглтон может вызвать неожиданное поведение, но это остается для тестирования.