java - 使用 guice(或 Spring)将依赖项注入(inject)到枚举中

标签 java spring enums guice

我正在将 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)向枚举类注入(inject)一些东西?例如:

public enum ActionEnum {
    ACTION1 {
       @Inject
       SomeClass case1ToBeUsedByAction1;

       void perform() { 
            case1ToBeUsedByAction1.doSomething();
            case2ToBeUsedByActionN.doSomething();
       }
    },
    ACTION2 { void perform() { case2ToBeUsedByActionN.doSomething(); }};
    abstract void perform();
    @Inject SomeClass case2ToBeUsedByActionN;
}

或者如何更改当前代码库以启用注入(inject)?

最佳答案

您可以将类添加为枚举值,如下所示:

public enum TestType {

TEST_TYPE_1("TEST-1", Test1.class), 
TEST_TYPE_2("TEST-2", Test2.class), 
TEST_TYPE_3("TEST-3", Test3.class), 
TEST_TYPE_4("TEST-4", Test4.class), 
TEST_TYPE_5("TEST-5", Test5.class);

private final String testType;
private final Class<? extends TestIF> tester;

private <T extends TestIF> TestType(String testType, Class<? extends TestIF> tester)    {       
    this.testType = testType;
    this.tester = (Class<tester.TestIF>) tester;
}

public String toString() {
    return this.testType;
}

public Class<? extends TestIF> tester() {
    return this.tester;
}

然后为每个类实现 TestIF 并执行注入(inject)的类,如下所示:

TestIF tester = Guice.createInjector().getInstance(testType.tester());    
tester.perform();

关于java - 使用 guice(或 Spring)将依赖项注入(inject)到枚举中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30205314/

相关文章:

java - JDBC:jtds getString() 以科学记数法返回 double

java - Java 17 中的 LineNumberReader 是否存在不兼容性?

Spring Java 配置 : Tomcat deploy without web. xml

c - 验证枚举的所有设置值是否不同

java - 如何使用 Java 在 Android Studio 中使用 dataType(String、Integer、boolean)创建枚举类型?

java - 使用 Jboss 服务器阻止 JSF 应用程序下载 JS 文件

java - 在 Spring 表单中显示 ArrayList

multithreading - Spring相当于CompletionService?

java - 访问字段时出错(使用 Hibernate/JPA)

Python:枚举值与命名单元