package com.github.zhangkaitao.spring.service;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Service;
import org.springframework.util.concurrent.FailureCallback;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.util.concurrent.ListenableFutureTask;
import org.springframework.util.concurrent.SuccessCallback;
import java.util.concurrent.Callable;
/*
Callable<Object> task = new Callable<Object>() {
@Override
public Object call() throws Exception {
try {
Object result = invocation.proceed();
if (result instanceof Future) {
return ((Future<?>) result).get();
}
}
catch (Throwable ex) {
handleError(ex, userDeclaredMethod, invocation.getArguments());
}
return null;
}
};
Class<?> returnType = invocation.getMethod().getReturnType();
if (ListenableFuture.class.isAssignableFrom(returnType)) {
return ((AsyncListenableTaskExecutor) executor).submitListenable(task);
}
else if (Future.class.isAssignableFrom(returnType)) {
return executor.submit(task);
}
else {
executor.submit(task);
return null;
}
*/
/**
* User: zhangkaitao
* Date: 14-7-31
* Time: ����7:08
* Version: 1.0
*/
@Service
@Async
public class AsyncService {
public void throwException() {
throw new RuntimeException("error");
}
public String asyncGet1() {
return "123";
}
//����ֵ������ListenableFuture/Future����Ϊ��ʵ�ֵ����⣨return ((AsyncListenableTaskExecutor) executor).submitListenable(task);��
public ListenableFuture<String> asyncGet2() {
return new AsyncResult<String>("123");
}
}