1

我正在使用 Java EE 8,并且我有下一个枚举。问题是是否可以将一个类中另一个注入变量的值分配给一个注入变量,就像下一行一样?

public enum CommandEnum {

    EMPTY_COMMAND {
        {
            this.command = emptyCommand;
        }
    },
    NAME_GENERATION {
        {
            this.command = nameGenerationCommand;
        }
    },
    NAME_GENERATION_SETTINGS {
        {
            this.command = nameGenerationSettingsCommand;
        }
    },
    SIGNIN {
        {
            this.command = signinCommand; // is it possible?
        }
    };

    @Inject
    @EmptyCommandQualifier
    Command command;
    @Inject
    EmptyCommand emptyCommand;
    @Inject
    NameGenerationCommand nameGenerationCommand;
    @Inject
    NameGenerationSettingsCommand nameGenerationSettingsCommand;
    @Inject
    SigninCommand signinCommand;

    public Command getCommand() {
        return command;
    }
}

谢谢你。

4

1 回答 1

1

是的,这是可能的——但只有在 CDI 有机会注入价值之后。CDI@PostConstruct为此目的支持注释

使用@PostConstruct注解初始化托管 Bean 初始化托管 bean 指定 CDI 框架在依赖注入之后但在类投入使用之前应该调用的生命周期回调方法。

  1. 在托管 bean 类或其任何超类中,定义一个执行所需初始化的方法。
  2. 用注解对方法的声明进行javax.annotation.PostConstruct注解。

当托管 bean 被注入到组件中时,CDI 会在所有注入发生且所有初始化程序都被调用后调用该方法

注意:根据 JSR 250 的规定,如果在超类中声明了带注释的方法,则除非声明类的子类覆盖该方法,否则将调用该方法。

添加下面的方法会有你想要的效果:

@PostConstruct
public void init () {
    this.command = signinCommand;
}
于 2021-04-04T14:03:08.940 回答