Java 在GUI初始化中使用以前注入的绑定
我需要解决这个奇怪的任务:我有一个类,它是由Guice创建的:Java 在GUI初始化中使用以前注入的绑定,java,guice,actor,akka,Java,Guice,Actor,Akka,我需要解决这个奇怪的任务:我有一个类,它是由Guice创建的: bind(A.class) 但稍后我需要用类A初始化Actor(本质上是Actor): 如何返回以前绑定的actor A的实例?我可能误解了??所暗示的问题,但在使用Guice时,通常会尝试避免更新很多对象。当您需要一个由Guice管理的新对象时,只需请求该类型的提供程序。即使您没有为它编写一个提供程序,也有一个隐式提供程序,其中Guice或者为它绑定的范围恢复对象,或者为您提供一个新的提供程序,其中包含它需要的注入对象 它可能看
bind(A.class)
但稍后我需要用类A初始化Actor(本质上是Actor):
如何返回以前绑定的actor A的实例?我可能误解了
??
所暗示的问题,但在使用Guice时,通常会尝试避免更新很多对象。当您需要一个由Guice管理的新对象时,只需请求该类型的提供程序。即使您没有为它编写一个提供程序,也有一个隐式提供程序,其中Guice或者为它绑定的范围恢复对象,或者为您提供一个新的提供程序,其中包含它需要的注入对象
它可能看起来像:
class WhateverClassThisIs {
private provider<A> providesA;
@Inject
public WhateverClassThisIs(provider<A> providesA) {
this.providesA = providesA;
}
public whateverMethodThisIs() {
actorSystem.actorOf(
new Props(
new UntypedActorFactory() {
public UntypedActor create() {
/// ???? translation: I need an object A here.
A a = providesA.get();
}
})
);
}
}
class这是什么{
私人供应商提供服务;
@注入
公共WhateverClassThis(提供商提供){
this.providesA=providesA;
}
公共WhateverMethodThis(){
actorSystem.actorOf(
新道具(
新的非类型DactorFactory(){
公共非类型转换器create(){
///翻译:我需要一个物体。
A=providesA.get();
}
})
);
}
}
如果可以编辑其他类类型,则可以替换为注入其构造函数/方法所需的对象,从而消除对新类的更多使用
另一方面,如果您说要获得正确的
A
类型,您需要执行此actorSystem.actorOf
调用,那么您需要为A
实现一个提供程序,而不是仅仅绑定它。我认为您的问题不清楚,请您更精确一点好吗?除此之外,它是否与您使用的Actor/Akka有关?它和这个问题有联系吗?我认为它与阿克卡没有严格的关系。假设类A有这样的构造函数“public A(B instanceB,C instanceC){}”,并且在GUI中的某个地方创建了B和C的实例。我需要的是在实例创建之后获取对它的引用,以便对它做一些事情(比如调用一些方法或在某个注册表中注册它)。我通过创建额外的类BootStrap解决了这个问题,它将A作为它自己的构造函数的参数,并且在构造函数中它做了一些有用的事情。但这似乎是一个蹩脚的解决方案。对不起……还是让人困惑。也许更多:)。我以为是我,但似乎没人能用这几条信息回答你。请编辑您的问题,并给出一个真实的例子,说明您希望实现的目标以及您迄今为止所做的尝试。我想(我认为)你的问题可以通过Guice提供者或辅助注入机制简单地解决(你看过吗?),但由于我仍然不理解你100%的解释,所以很难给出答案。
class WhateverClassThisIs {
private provider<A> providesA;
@Inject
public WhateverClassThisIs(provider<A> providesA) {
this.providesA = providesA;
}
public whateverMethodThisIs() {
actorSystem.actorOf(
new Props(
new UntypedActorFactory() {
public UntypedActor create() {
/// ???? translation: I need an object A here.
A a = providesA.get();
}
})
);
}
}