如何在Spring上下文中注入回调类?

时间:2014-03-12 12:45:25

标签: java spring dependency-injection callback

是否可以使用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管理?

1 个答案:

答案 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
    }
}