2017-02-20 3 views
1

У меня есть объект пул ресурсов:Spring - Запрос область видимости боба от объекта пула

public interface PooledResource { 
    ... 
} 

@Component 
public class ResourcePool { 
    public PooledResource take()        { ... } 
    public void   give(final PooledResource resource) { ... } 
} 

В настоящее время я использую этот пул следующим образом в моих JAX-RS конечных точках:

@Path("test") 
public class TestController { 
    @Autowired 
    private ResourcePool pool; 

    @GET 
    Response get() { 
     final PooledResource resource = pool.take(); 
     try { 
      ... 
     } 
     finally { 
      pool.give(resource); 
     } 
    } 

}

Это прекрасно работает. Однако, запрашивая PooledResource вручную и вынужден не забывать оговорку finally, я нервничаю. Я хотел бы реализовать контроллер следующим образом:

@Path("test") 
public class TestController { 
    @Autowired 
    private PooledResource resource; 

    @GET 
    Response get() { 
     ... 
    } 

}

Здесь PooledResource вводится, вместо того, чтобы управляющий бассейном. Эта инъекция должна быть запрошенной, а также после завершения запроса ресурс должен быть возвращен в пул. Это важно, иначе в конечном итоге у нас не хватит ресурсов.

Возможно ли это весной? Я играл с FactoryBean, но, похоже, это не помогает вернуть бобов.

ответ

2

Внесите a HandlerInterceptor и добавьте его с помощью бобы с запросом. Когда вызывается preHandle, настройте компонент с правильным значением. Когда вызывается afterCompletion, очистите его снова.

Обратите внимание, что вам нужно будет объединить это с фабрикой фасоли, чтобы получить отличную инъекцию PooledResource в другие компоненты.

Завод в основном вводит тот же объект, что и в HandlerInterceptor, и создает (или просто возвращает) PooledResource.

+0

Благодарим за предложение. Работает ли HandlerInterceptor в сочетании с JAX-RS/Jersey? –

+0

Я не уверен в этом, если нет, вы можете пойти на более низкий уровень и искать какой-то фильтр, который вы можете установить для запроса/ответов. – john16384

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