gpt4 book ai didi

java - 使用 Guice 注入(inject)依赖项适用于一种方法,而不适用于另一种方法

转载 作者:行者123 更新时间:2023-12-01 18:18:37 24 4
gpt4 key购买 nike

我的应用程序遇到了“奇怪的”Guice 问题。不知何故,服务被注入(inject)到一种方法中,而不是另一种方法中。我不知道为什么:

public class MyServerResource {

@Inject
MyService myService;

@Override
public void create() {
if(myService == null){
// This one is not thrown
throw new RuntimeException("Service is null");
}
}

@Override
public void get() {
if(myService == null){
// This one is thrown
throw new RuntimeException("Service is null");
}
}

}

在create()方法中,服务不为null,而在get()方法中,服务为null。这是什么Guice行为?有人经历过吗?

最佳答案

与字段和方法注入(inject)相比,更喜欢构造函数注入(inject)。

public class MyServerResource {

private final MyService myService;

@Inject
public MyServerResource(MyService myService) {
this.myService = myService;
}

@Override
public void create() {
// myService isn't null here
}

@Override
public void get() {
// myService isn't null here
}
}

这种方法有很多好处:

  • “不可变”类(类成员在构造函数中初始化)
  • 更好的单元测试用例。您只需要向构造函数提供模拟服务即可。

关于java - 使用 Guice 注入(inject)依赖项适用于一种方法,而不适用于另一种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28227696/

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