如何解决@Inject = @Inject,有可能吗?
我正在使用 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;
}
}
谢谢。
解决方法
是的,这是可能的 - 但只有在 CDI 有机会注入价值之后。 CDI supports @PostConstruct
annotation for this purpose:
使用 @PostConstruct
注释初始化托管 Bean
初始化托管 bean 指定 CDI 框架应在依赖注入之后但在类投入使用之前调用的生命周期回调方法。
- 在托管 bean 类或其任何超类中,定义一个方法来执行您需要的初始化。
- 使用
javax.annotation.PostConstruct
注释对方法的声明进行注释。
当托管 bean 被注入到组件中时,CDI 在所有注入发生后和所有初始化器被调用后调用该方法。
注意: 根据 JSR 250 的规定,如果在超类中声明了带注释的方法,则除非声明类的子类覆盖该方法,否则将调用该方法。
添加下面的方法就会有你想要的效果:
@PostConstruct
public void init () {
this.command = signinCommand;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。