2015-09-01 1 views
3

В Грааль один определяет пружинные бобы в resources.groovy с помощью пружинной заводной DSLКак определить прототип в области видимости боба Groovy яровой DSL

beans = { 
    myBean(MyBeanImpl) { 
     someProperty = 42 
     otherProperty = "blue" 
     bookService = ref("bookService") 
    } 
} 

Как вы определяете прототип боба области действия с помощью этого DSL? Я не смог найти что-нибудь по этому поводу в documentation

+0

«Я не мог найти что-либо в этом документе» - в разделе 18.3 приведен пример, который настраивает компонент sessionFactory для области запроса. В этом примере конкретно не показано, как настроить фасонный прототип, но синтаксис одинаковый для всех областей. Просто замените «запрос» на «прототип». –

+0

@JeffScottBrown Извините, я пропустил это. Я снял и искал прототип в этом документе. – mzzzzb

ответ

7

Это должно работать:

beans = { 
    myBean(MyBeanImpl) { bean -> 
     bean.scope = 'prototype' 
     someProperty = 42 
     otherProperty = "blue" 
     bookService = ref("bookService") 
    } 
} 
+0

Это не работает для меня. Я использую grails 2.4.4. Можете ли вы оказать некоторую помощь? – Richa

+0

@ Richa Не зная, что вы делаете, и что конкретно не работает, было бы очень сложно предоставить помощь. То, что показано выше, действительно работает и всегда имеет. В вашем приложении должен быть какой-то другой фактор, который усложняет ситуацию. –

0

Я согласен с Джеффом Скотт Браун.

Откуда вы знаете, что это не работает? Мы используем Grails 2.3.9.

У меня есть это в моем resources.groovy:

httpBuilderPool(HTTPBuilder) { bean -> 
    bean.scope = 'prototype' // A new service is created every time it is injected into another class 
    client = ref('httpClientPool') 
} 

... 

и это в интеграции тест Spock:

import grails.test.spock.IntegrationSpec 
import org.apache.http.impl.client.CloseableHttpClient 
import org.apache.log4j.Logger 

class JukinHttpBuilderSpec extends IntegrationSpec { 

    private final Logger log = Logger.getLogger(getClass()) 

    def httpBuilderPool 
    def grailsApplication 

    void "test jukinHttpBuilder instantiates"() { 
     expect: 
     httpBuilderPool 
     httpBuilderPool.client instanceof CloseableHttpClient 
    } 

    void "test httpBuilderPool is prototype instaance"() { 
     when: 'we call getBean on the application context' 
     def someInstanceIds = (1..5).collect { grailsApplication.mainContext.getBean('httpBuilderPool').toString() }.toSet() 
     log.info someInstanceIds.toString() 

     then: 'we should get a new instance every access' 
     someInstanceIds.size() == 5 
    } 

    void "test injected httpBuilderPool is prototype instance"() { 
     when: 'we access the injeted httpBuilderPool' 
     def someInstanceIds = (1..5).collect { httpBuilderPool.toString() }.toSet() 
     log.info someInstanceIds.toString() 

     then: 'it uses the same instance every time' 
     someInstanceIds.size() == 1 
    } 
} 

, который показывает мне, что это работает в 2.3.9.

Смежные вопросы