8

別の製品が呼び出すメソッドを持ち、オブジェクトのリストを取得するコードがフィールドにあるとします。また、返されるリストにデータを入力する際に​​より柔軟になるようにコードを変更する必要があります。暫定的に、リストを返す前にメソッドをインターセプトし、リストから項目を削除する顧客用のインターセプターを作成できますか?メソッドを呼び出す製品がリストを取得します。

例えば

OurCode.search() は、foundObjects のリストを返します

その他の製品は OurCode.search を呼び出し、100 アイテムを受け取ります

OurCode.search が戻る前にインターセプトするインターセプターを作成し、見つかったオブジェクトのリストを変更して、不要なアイテムを削除することはできますか? これは、将来のリリースまでの一時的な修正にすぎません

4

1 に答える 1

13

そのようにすることはお勧めしませんが (わかりやすくするため、そして私の経験では「一時的な修正」は永続的なものになります)、インターセプターを使用してこれを行うことができます。

@AroundInvoke
Object filterSearchResults(InvocationContext ctx) throws Exception {
    Object result = ctx.proceed();
    if ( result != null) {
        List<SearchResult> results = (List<SearchResult>)result;
        // do whatever you want to to with your results here
        return results;
    }
    return result;
}
于 2012-07-26T06:17:50.157 に答える