CDI -在扩展抽象类和实现接口的类上使用@ qualiifer不能满足的依赖



在Payara 5, Jakarta EE 8中,我尝试注入所有合格的bean,然后使用限定符选择一个特定的bean,如下所示:

@Stateless
public class ScheduledTaskExecutor {
@Inject
@Any
private Instance<QCScheduledTask> scheduledTasks;

@Asynchronous
public void executeTask(final String taskName, final String jobID) {
final ScheduledTaskQualifier qualifier = new ScheduledTaskQualifier(taskName);
final QCScheduledTask scheduler = scheduledTasks.select(qualifier).get();
scheduler.execute(jobID);
}
}
public interface QCScheduledTask {
public void execute(final String jobID);
}

与实现者一起扩展接口的抽象类:

public abstract class AbstractQCScheduledTask implements QCScheduledTask {
private String jobID;
protected abstract void executeTask();
public void execute(final String jobID) {
//
}

protected void updateStatus(final TaskStatus status) {
//
}
}

@Stateless
@QCScheduled(taskName = "TASK_BACKGROUND_JOB_EVALUATION")
public class BackgroundJobEvaluationExecuter extends AbstractQCScheduledTask {
@Inject
private BackgroundJobEvaluator backgroundJobEvaluator;
@Override
protected void executeTask() {
}
}

和限定词

@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER, TYPE})
public @interface QCScheduled {
/**
* Task name discriminator
*
* @return
*/
String taskName();

}

结果为未满足的依赖项错误。

相同的代码在JavaEE 7应用服务器上工作。我在javartaee 8规范中找不到任何差异,此外,我认为不应该限制将接口和抽象类一起用于所需bean实现的运行时解析。

@jakarta.ejb.Local标注接口QCScheduledTask

最新更新