Я пытаюсь настроить некоторый код, который будет вести себя так, если доступна область запроса Spring, и по-другому, если указанная область недоступна.
Рассматриваемое приложение является веб-приложением, но есть некоторые триггеры JMX и запланированные задачи (например, Quartz), которые также вызывают вызовы.
E.g.
/**
* This class is a spring-managed singleton
*/
@Named
class MySingletonBean{
/**
* This bean is always request scoped
*/
@Inject
private MyRequestScopedBean myRequestScopedBean;
/* can be invoked either as part of request handling
or as part of a JMX trigger or scheduled task */
public void someMethod(){
if(/* check to see if request scope is available */){
myRequestScopedBean.invoke();
}else{
//do something else
}
}
}
Предполагая, что myRequestScopedBean
находится в области запроса.
Я знаю, что это можно сделать с помощью try
-catch
вокруг вызова myRequestScopedBean
, например:
/**
* This class is a spring-managed singleton
*/
@Named
class MySingletonBean{
/**
* This bean is always request scoped
*/
@Inject
private MyRequestScopedBean myRequestScopedBean;
/* can be invoked either as part of request handling
or as part of a JMX trigger or scheduled task */
public void someMethod(){
try{
myRequestScopedBean.invoke();
}catch(Exception e){
//do something else
}
}
}
но это кажется действительно неуклюжим, поэтому мне интересно, знает ли кто-нибудь об элегантном способе Spring опросить что-то, чтобы узнать, доступны ли bean-компоненты с областью запроса.
Большое спасибо!
someMethod
может не быть частью обработки запроса. - person Taylor   schedule 01.04.2015MyRequestScopedBean
находится в области запроса.MySingletonBean
имеет одноэлементную область видимости. Что нужно проверить и почему? - person Sotirios Delimanolis   schedule 01.04.2015WebApplicationContext
s), то при попытке инициализировать этот компонент снова произойдет сбой инициализации. - person Sotirios Delimanolis   schedule 01.04.2015MySingletonBean
, является потоком обработки запросов, тогда все будет работать нормально, но если поток запускается как часть триггера JMX, вы получите некоторое исключение из внутренних компонентов Spring. - person Taylor   schedule 01.04.2015