Develop and Download Open Source Software

Recent Changes

2012-05-25
2012-04-24
2012-04-17
2012-04-16

Wiki Guide

Side Bar

@BlancoCache アノテーション

メソッドに対してキャッシュ機能を追加します。

仕様

適用箇所

  • メソッド

アノテーション要素

要素名 デフォルト 説明

詳細

  • 同じパラメータでメソッドが呼び出された際に、直近の実行結果をキャッシュから取り出して戻します。
  • キャッシュはソフト参照による実装です。

ソースコード自動生成の例

入力ソースコード: AbstractSampleCache.java

package sample.cache;

import blanco.cache.BlancoCache;

/**
 * メソッド・キャッシュをおこなうソースコードを自動生成するサンプル。
 */
public abstract class AbstractSampleCache {
    /**
     * キャッシュをおこないたい、処理コストの高いメソッド。
     * 
     * @param arg1
     *            引数その1
     * @param arg2
     *            引数その2
     * @return メソッドの戻り値。ただしキャッシュにヒットした場合は前回のメソッド呼び出し時の実行結果。
     */
    @BlancoCache
    public String methodWithHighCost(final String arg1, final String arg2) {
        // ここに実際の処理を記述します。
        return "戻り値: " + arg1;
    }
}

出力ソースコード: SampleCache.java ★以下のソースコードは Blanco2g によって自動生成されたものです。

/*
 * このクラスは 'AbstractSampleCache' の具象クラスとして blanco Framework によって自動生成されました。
 */
package sample.cache;

import java.util.Map;

import blanco.fw.BlancoGeneratedBy;

/**
 * メソッド・キャッシュをおこなうソースコードを自動生成するサンプル。
 */
@BlancoGeneratedBy(name = "Blanco2g")
public class SampleCache extends AbstractSampleCache {
    /**
     * [@BlancoCache] Cache object for method 'methodWithHighCost'.
     */
    private final Map<String, java.lang.ref.SoftReference<java.lang.String>> blanco2gCacheMethodmethodWithHighCost = java.util.Collections.synchronizedMap(new java.util.HashMap<java.lang.String, java.lang.ref.SoftReference<java.lang.String>>(8192));

    /**
     * キャッシュをおこないたい、処理コストの高いメソッド。
     *
     * @param arg1 引数その1
     * @param arg2 引数その2
     * @return  メソッドの戻り値。ただしキャッシュにヒットした場合は前回のメソッド呼び出し時の実行結果。
     */
    public String methodWithHighCost(String arg1, String arg2) {
        java.lang.String autoValMethodResult;
        // [@BlancoCache] Search cache.
        final java.lang.ref.SoftReference<java.lang.String> autoValMethodResultCacheReference = blanco2gCacheMethodmethodWithHighCost.get("" + arg1 + "\t" + arg2 + "");
        if (autoValMethodResultCacheReference != null) {
            autoValMethodResult = autoValMethodResultCacheReference.get();
            if (autoValMethodResult != null) {
                // Hit cache.
                return autoValMethodResult;
            }
        }
        autoValMethodResult = super.methodWithHighCost(arg1, arg2);
        // [@BlancoCache] Remember cache.
        blanco2gCacheMethodmethodWithHighCost.put("" + arg1 + "\t" + arg2 + "", new java.lang.ref.SoftReference<java.lang.String>(autoValMethodResult));
        return autoValMethodResult;
    }
}

リンク


SourceForge.JP is a Japanese version of SourceForge.net. For developments that are not related to Japan, we recommend you to use SourceForge.net.