如何使用Guice在控制器中重新初始化注入的组件?

时间:2016-01-08 14:41:40

标签: java dependency-injection playframework-2.0 guice playframework-2.4

我有一个控制器:

public class MyController extends Controller {

    private final AuthChecker authChecker;

    @Inject
    public MyController(AuthChecker authChecker) {
        this.authChecker = authChecker;
    }

    public Promise<Result> index() throws BusinessException {
        authChecker
            .tokenValue(request().username())
            .execute()
            .go();
        // bla bla bla
    }

}

我遇到AuthChecker的问题,因为它保留了一个未在每个请求之间重新初始化的内部状态。此类的初始化在其构造函数中完成,该构造函数仅执行一次,而不是@Singleton

根据Play's documentation

  

每次需要组件时都会创建新实例。如果一个   组件多次使用,默认情况下,多个实例   将创建组件。如果您只想要一个实例   然后你需要将它标记为单例。

我想要每个请求告诉Guice创建一个新实例。 我该如何解决这个问题?

另外,控制器是单身人士吗?因为它们似乎只在整个应用程序生命周期中创建过一次。

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用Provider,这意味着guice会在您每次访问时创建一个新实例(如果您的模块中没有另外配置):

<div class="letter" id="{@xml:id}">