是否可以使用Spring
的回调来管理应用程序上下文?
我的问题是从service
外部使用@Autowired
,但在该服务中,使用new
运算符定义了回调。
以下示例执行值得重试的方法。 Spring为这种情况提供RetryCallback
(我知道这可能会有所不同,但只是为了说明我的回调问题)。
@Service
class MyService {
//main method invoked
void run(DataVO dataVO) {
//new operator not usable in spring context
RetryCallback<Object> retryCallback = new RetryCallback<Object>() {
@Override
public Object doWithRetry(RetryContext context) throws Exception {
return createBooking(dataVO);
}
};
}
private Object createBooking(DataVO dataVO) {
//creates the booking, worth retry on specific failures
//uses further injected/autowired services here
}
}
是否有可能重构此代码段以便回调由spring / inject / autowired管理?
答案 0 :(得分:1)
让您的服务实现回调接口:
@Service
class MyService implements RetryCallback<Object> {
//main method invoked
void run(DataVO dataVO) {
}
@Override
public Object doWithRetry(RetryContext context) throws Exception {
return createBooking(dataVO);
}
private Object createBooking(DataVO dataVO) {
//creates the booking, worth retry on specific failures
//uses further injected/autowired services here
}
}