gpt4 book ai didi

java - 如何在 Play! 的静态方法中使用 play.cache.CacheApi框架 2.4.2

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:37 26 4
gpt4 key购买 nike

我有一个 play 框架应用程序,我已经迁移到 play framework 2.4.2 上运行。它为 javascript/html 前端提供了一个 RESTful API。现在我在引入缓存时遇到了一些问题。

LibraryController(将 JSON/HTTP 请求转换为 JSON/HTTP 响应):

public class LibraryController extends Controller {

public Result getBook(String isbn) {
Book book = LibraryManager.getBook(isbn);
BookDto bookDto = DtoMapper.book2BookDtos(book);
return ok(Json.toJson(bookDto));
}
}

LibraryManager(将域模型请求转换为域模型响应):

public class LibraryManager {

@Inject CacheApi cache;

public static Book getBook(String isbn) {

Book book = cache.get(isbn);
// ...
}

我这里的问题是我得到

non-static variable cache cannot be referenced from a static context

我注入(inject)缓存的方式是按照Play 2.4.2 Cache API documentation .当我按照 Play 2.2.x Cache API documentation 使用缓存时,我没有遇到这个问题.那个版本有一个我可以调用的静态方法。

我该怎么办?我应该让 getBook 非静态应用一些单例模式吗?或者我应该以其他方式访问缓存吗?示例代码肯定会有所帮助!

最佳答案

使用 @Singleton 注释让 Guice 知道 LibraryManager,从方法中删除 static 关键字并将它们拉到接口(interface):

@ImplementedBy(LibraryManager.class)
public interface ILibraryManager {
//
}

@Singleton
public class LibraryManager implements ILibraryManager {

@Inject
private CacheApi cache;

@Override
public Book getBook(String isbn) {
Book book = cache.get(isbn);
// ...
}

}

现在您可以通过 Controller 接口(interface)注入(inject) LibraryManager:

public class LibraryController extends Controller {

@Inject
private ILibraryManager libraryManager;

}

恭喜!您解耦了 LibraryManager 并以适当的方式将其与 Play 2.4 集成。

关于java - 如何在 Play! 的静态方法中使用 play.cache.CacheApi框架 2.4.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31833970/

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