首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用play.cache.CacheApi在静态方法中发挥作用!框架2.4.2

如何使用play.cache.CacheApi在静态方法中发挥作用!框架2.4.2
EN

Stack Overflow用户
提问于 2015-08-05 13:29:08
回答 2查看 3.8K关注 0票数 6

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

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

代码语言:javascript
复制
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 (将域模型请求转换为域模型响应):

代码语言:javascript
复制
public class LibraryManager {

@Inject CacheApi cache;

public static Book getBook(String isbn) {

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

我在这里遇到的问题是

代码语言:javascript
复制
non-static variable cache cannot be referenced from a static context

我注入缓存的方式与播放2.4.2缓存API文档相同。当我按照播放2.2.x缓存API文档使用缓存时,没有这个问题。那个版本有一个我可以调用的静态方法。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-05 14:13:39

Guice知道使用@Singleton注释的LibraryManager,从方法中删除静态关键字并将它们拉到接口上:

代码语言:javascript
复制
@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);
        // ...
    }

}

现在您可以通过一个接口将LibraryManager注入到控制器:

代码语言:javascript
复制
public class LibraryController extends Controller {

    @Inject
    private ILibraryManager libraryManager;

}

祝贺你!您将LibraryManager解耦,并以适当的方式将其与Play 2.4集成。

票数 8
EN

Stack Overflow用户

发布于 2017-03-23 15:17:11

获取静态功能中的CacheApi.class实例。

代码语言:javascript
复制
    public class LibraryManager {

    public static Book getBook(String isbn) {
      CacheApi cache = Play.current().injector().instanceOf(CacheApi.class);
      Book book = cache.get(isbn);
    // ...
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31833970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档