2016-12-19 6 views
1

私は、Spring注釈を使用して既存のスプリングプロジェクトにキャッシュを組み込みます。注釈フィールドで使用する定数の作成

public class CacheParams { 

    public final String name;  
    public final int lifeTime;  
    public final TimeUnit lifeTimeUnit;  
    public final String key; 

    public CacheParams(args here) {/*implementation here*/} 
} 

と、これは私がそれを使用する方法です - -

class FooDaoCache extends FooDaoImpl { 

    private static final CacheParam USER_BY_ID_CACHE = new CacheParams(values here); 

    @Override 
    @Cacheable(cacheNames = USER_BY_ID_CACHE.name, key = USER_BY_ID_CACHE.key) 
    public User getUser(int userId) { 
     implementation here 
    } 
} 

しかしUSER_BY_ID_CACHEは、コンパイル時に作成されるように、これは動作しません。私は、キャッシュ構成を格納するため、このクラスを作成しています。私は単純にキャッシュ名を含む文字列定数を作成した場合、私は成功し、それを使用することができます -

class FooDaoCache extends FooDaoImpl { 
    private static final String CACHE_NAME = "baz"; 

    @Override 
    @Cacheable(cacheNames = CACHE_NAME) 
    public User getUser(int userId) { 
     //implementation here 
    } 
} 

をこれに対処するための任意の方法または別のデザインがありますか?私はクラスCacheParamsが必要です。なぜなら、他の部分でもキャッシュ名や有効期間などを使用して他の操作を実行する必要があるからです。

+0

いいえ、注釈でそれを使用するには、 'static final String'を使う必要があります。これが 'CacheParams'コンストラクタに渡すのと同じ文字列の場合は、文字列定数をコンストラクタパラメータとして使用します。 – ajb

+0

'key'として一定の値を設定しています!次に、複数の 'User'をキャッシュに格納するためにインデントする方法は?少なくとも@ Cachebleのキー属性を削除してから、あなたの方法で試してみて、結果を投稿してください。 Springキャッシュの場合** SpringコンテナにキャッシュUSER_BY_ID_CACHE.nameを持つBean **、CacheManager'を作成することを忘れないでください –

答えて

1

CacheParamは、enumでなければならず、nameフィールドはstatic final Stringである必要があります。

アノテーションの戻り値の型は、プリミティブ型、列挙型、文字列、クラスおよびこれらの配列のみです。

関連する問題