gpt4 book ai didi

java - 如何使用 Google Guice 注入(inject)依赖项

转载 作者:行者123 更新时间:2023-12-01 17:20:07 25 4
gpt4 key购买 nike

我已经阅读了用户指南和所有内容,但我仍然不明白在尝试注入(inject)依赖项时如何修改现有代码以使用 Google Guice。因此,为了使它更容易,我创建了这个简单的示例,如果有人可以用这个简单的示例进行解释,我将非常感激!

假设我有一个

public Class A {

private int count = 0;

public A() {
}

public int getCount() {

return count;
}

public void setCount(int newCount) {

this.count = newCount;
}
}

和另一个类

public Class B {

private A objectA;

public B() {
objectA = new A();
}

public void messWithCount() {
int tempCount = objectA.getCount();
objectA.setCount(tempCount+1);
}
}

所以基本上我的问题是:我将如何使用 Google Guice 在构造函数 B() 中提取 objectA 的创建,并将其作为依赖项注入(inject)B 类,相当于

@Inject    
public B() {
}

我该如何将 A 的实例注入(inject)其中?

最佳答案

首先,B 不应该绑定(bind)到类 A,而应该使用接口(interface)(例如 AInterface)。Guice 的要点是绑定(bind)同一接口(interface)的不同实现,而不是绑定(bind)到某个类。

所以我们假设A类实现AInterface

interface AInterface {
public int getCount();
public void setCount(int newCount);
}

class A implements AInterface {
private int count = 0;

public A() {
System.out.println("done!");
}

@Override
public int getCount() {
return count;
}

@Override
public void setCount(int newCount) {
this.count = newCount;
}
}

现在你告诉它注入(inject)你的变量:

class B {
@Inject
private AInterface objectA;

public B() {}

public void messWithCount() {
int tempCount = objectA.getCount();
objectA.setCount(tempCount + 1);
}
}

我删除了 static 修饰符,但如果您坚持将其设为静态,则需要使用 requestStaticInjection 进行绑定(bind)

您将实现A绑定(bind)到名为模块的特殊类中的接口(interface)AInterface:

class SimpleModule extends AbstractModule {

@Override
protected void configure() {
bind(AInterface.class).to(A.class);
}
}

现在你要求 Guice 为你生成 B。

public class Temptemp {
public static void main(String[] args) {
Injector i = Guice.createInjector(new SimpleModule());
B b = i.getInstance(B.class);

}
}

关于java - 如何使用 Google Guice 注入(inject)依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19371717/

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