3

何らかの理由で、グアバ キャッシュ インスタンスを作成して Spring Bean として公開することができません。

構築コードは次のとおりです。

@Configuration
public class ProductRepositoryCache {

    @Bean
    public Cache<NameSearchKey,Collection<String>> nameSearchCache() {
        Cache<NameSearchKey,Collection<String>> result = CacheBuilder.newBuilder()
                .maximumSize(1024)
                .expireAfterAccess(0, TimeUnit.HOURS)
                .expireAfterWrite(6, TimeUnit.HOURS)
                .build();
        return  (Cache<NameSearchKey,Collection<String>>) result;
    }
}

そしてそれを使用します:

@Resource
Cache<NameSearchKey,Collection<String>> nameSearchCache;

しかし、展開は次のように失敗します:

リソースの依存関係の挿入に失敗しました。ネストされた例外は org.springframework.beans.factory.BeanNotOfRequiredTypeException: 'nameSearchCache' という名前の Bean はタイプ [com.google.common.cache.Cache] である必要がありますが、実際にはタイプ [com.google.common.cache.CacheBuilder] でした|#]

シンプルなものが欠けていると思いますが、見つかりません。だから、私の質問は - 私が間違っていることは何ですか?

4

1 に答える 1

1

実際に返さcom.google.common.cache.LocalCache.LocalManualCacheれるインスタンスはキャッシュです。あなたのコードは正しいと思います。さらに、以前も同じことをしましたが、問題なく動作します。

以下を含むを確認することをお勧めしBeanNotOfRequiredTypeExceptionます。

beanName - 要求された Bean の名前

requiredType - 必須

type actualType - 返された実際の型で、予想された型と一致しませんでした

BeanNotOfRequiredTypeException次に、インスタンスをデバッグして原因を見つけることができます。

また、Bean の明示的な名前を宣言することもできます。これにより、エラーが発生しやすい問題を回避できます。

@Bean(name = "thisCache")
public Cache<NameSearchKey,Collection<String>> nameSearchCache() {...}

@Resource(name = "thisCache")
Cache<NameSearchKey,Collection<String>> nameSearchCache;
于 2012-08-06T14:29:11.060 に答える