「Asynch」アノテーションが存在する場合、別のスレッドで関数を実行できるこのコードがあります。追加したばかりの新しい関数の戻り値も処理する必要があることに気付いた日を除いて、すべてが正常に機能します。これにはハンドラーとメッセージパッシングを使用できますが、既に構築されたプロジェクト構造 (巨大で正常に動作する) のため、メッセージパッシングで動作するように既存の関数を変更することはできません。
コードは次のとおりです。
/**
* Defining the Asynch interface
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface Asynch {}
/**
* Implementation of the Asynch interface. Every method in our controllers
* goes through this interceptor. If the Asynch annotation is present,
* this implementation invokes a new Thread to execute the method. Simple!
*/
public class AsynchInterceptor implements MethodInterceptor {
public Object invoke(final MethodInvocation invocation) throws Throwable {
Method method = invocation.getMethod();
Annotation[] declaredAnnotations = method.getDeclaredAnnotations();
if(declaredAnnotations != null && declaredAnnotations.length > 0) {
for (Annotation annotation : declaredAnnotations) {
if(annotation instanceof Asynch) {
//start the requested task in a new thread and immediately
//return back control to the caller
new Thread(invocation.getMethod().getName()) {
public void execute() {
invocation.proceed();
}
}.start();
return null;
}
}
}
return invocation.proceed();
}
}
さて、次のように変換するにはどうすればよいですか:
@Asynch
public MyClass getFeedback(int clientId){
}
MyClass mResult = getFeedback(12345);
「mResult」は戻り値で更新されますか?
事前にサンクス...