【发布时间】:2015-05-13 03:46:25
【问题描述】:
我正在将一个 servlet 应用程序与 Guice 集成(可能是 Spring,我选择 Guice 只是因为我使用它)。而且这个应用程序广泛使用特定于常量的方法(数千个枚举)。从服务中,它确定要调用的操作:
ActionEnum act = ActionEnum.valueof("Action from context");
act.perform();
枚举操作如下所示:
public enum ActionEnum {
ACTION1 { perform() {}},
ACTION2 { perform() {}};
abstract void perform();
}
有没有办法通过 Guice(或 Spring)向枚举类注入一些东西?例如:
public enum ActionEnum {
ACTION1 {
@Inject
SomeClass case1ToBeUsedByAction1;
void perform() {
case1ToBeUsedByAction1.doSomething();
case2ToBeUsedByActionN.doSomething();
}
},
ACTION2 { void perform() { case2ToBeUsedByActionN.doSomething(); }};
abstract void perform();
@Inject SomeClass case2ToBeUsedByActionN;
}
或者如何更改当前代码库以启用注入?
【问题讨论】:
-
我认为你不能注入
enum。没有实例可供您注入... 将其更改为class? -
枚举原则上是静态的、全局的、对象。它似乎不适合注射。
-
您可以使用
Injector.injectMembers()或AbstractModule.requestInjection()来执行此操作。但这似乎不是一个好的设计。