gpt4 book ai didi

java - Play Framework Cache Api 注入(inject)在单例中返回空指针异常

转载 作者:行者123 更新时间:2023-11-30 06:53:33 24 4
gpt4 key购买 nike

我有一个 Play Framework 应用程序。我正在尝试通过静态方法访问缓存。我决定将缓存包装成单例,但当尝试访问类 CacheSingleton 中的缓存变量时,出现 NullPointerException。问题如何解决?谢谢。

import javax.inject.*;
import play.cache.*;

@Singleton
public final class CacheSingleton {
@Inject CacheApi cache;
private static volatile CacheSingleton instance = null;


private CacheSingleton() {
}

public static CacheSingleton getInstance() {
if (instance == null) {
synchronized(CacheSingleton.class) {
if (instance == null) {
instance = new CacheSingleton();
}
}
}
return instance;
}
}

public class CustomLabels {
public static String get() {
CacheSingleton tmp = CacheSingleton.getInstance();
try
{
tmp.cache.set("key", "value");
}catch(Exception e){}
}
}

最佳答案

不要使用静态注入(inject)。

“一般来说”这是不可能的: https://stackoverflow.com/a/22068572/1118419

Play 使用 Guice 进行 DI,Guice 可以进行静态注入(inject),但强烈不推荐这种能力:

https://github.com/google/guice/wiki/Injections#static-injections

use CacheApi in Play的正确方法:

import play.cache.*;
import play.mvc.*;

import javax.inject.Inject;

public class Application extends Controller {

private CacheApi cache;

@Inject
public Application(CacheApi cache) {
this.cache = cache;
}

// ...
}

关于java - Play Framework Cache Api 注入(inject)在单例中返回空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42250330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com