gpt4 book ai didi

java - 这是在 guice 中使用自定义注释的正确方法吗?

转载 作者:行者123 更新时间:2023-12-01 19:27:23 27 4
gpt4 key购买 nike

嗨,我在 guice 中有一个自定义注释

@BindingAnnotation
@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE})
public @interface Worker {
String value();
}
class WorkerImpl implements Named, Serializable {

private final String value;

public WorkerImpl(String value) {
this.value = checkNotNull(value, "name");
}

@Override
public String value() {
return this.value;
}

@Override
public int hashCode() {
// This is specified in java.lang.Annotation.
return (127 * "value".hashCode()) ^ value.hashCode();
}

@Override
public boolean equals(Object o) {
if (!(o instanceof Worker)) {
return false;
}

Worker other = (Worker) o;
return value.equals(other.value());
}

@Override
public String toString() {
return "@" + Worker.class.getName() + "(value=" + Annotations.memberValueString(value) + ")";
}

@Override
public Class<? extends Annotation> annotationType() {
return Worker.class;
}

private static final long serialVersionUID = 0;
}

现在我定义了一堆类似这样的类

@Worker("worker1")
class Test1 implements Base {
}

@Worker("worker2")
class Test2 implements Base {
}

现在,如果在 guice 中定义绑定(bind),如

bind(Base.class)
.annotatedWith(Test1.class.getAnnotation(Worker.class))
.to(Test1.class);

bind(Base.class)
.annotatedWith(Test2.class.getAnnotation(Worker.class))
.to(Tes2.class);

如果我尝试从注入(inject)器获取相应的实例,例如

injector.getInstance(Key.get(Worker.class, new WorkerImpl("worker1")));
injector.getInstance(Key.get(Worker.class, new WorkerImpl("worker2")));

这些会给我worker1和worker2的实例吗?

我不确定这是否是正确的方法。

最佳答案

如果您有自定义注释,则应该正确实现它。

例如,您有 @Worker 注释,但 WorkerImpl 实现了 @Named。您应该让它实现@Worker

现在,您的绑定(bind)应该如下所示:

bind(Base.class)
.annotatedWith(new WorkerImpl("worker1"))
.to(Test1.class);
bind(Base.class)
.annotatedWith(new WorkerImpl("worker2"))
.to(Test2.class);

您将获得如下实例:

Base test1 = injector.getInstance(Key.get(Base.class, new WorkerImpl("worker1")));
Base test2 = injector.getInstance(Key.get(Base.class, new WorkerImpl("worker2")));

对于其余部分,您可以正确处理注释 hashCode,这是创建自定义注释实现中最难的部分。

关于java - 这是在 guice 中使用自定义注释的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59297420/

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