Я согласен с Джеффом Скотт Браун.
Откуда вы знаете, что это не работает? Мы используем 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.
«Я не мог найти что-либо в этом документе» - в разделе 18.3 приведен пример, который настраивает компонент sessionFactory для области запроса. В этом примере конкретно не показано, как настроить фасонный прототип, но синтаксис одинаковый для всех областей. Просто замените «запрос» на «прототип». –
@JeffScottBrown Извините, я пропустил это. Я снял и искал прототип в этом документе. – mzzzzb