Java 为什么我能';t注入非bean抽象父类的子bean类

Java 为什么我能';t注入非bean抽象父类的子bean类,java,jakarta-ee,inheritance,cdi,weld,Java,Jakarta Ee,Inheritance,Cdi,Weld,我有一个带参数化构造函数的参数化抽象类: public abstract class BasicEntidadController<T extends Entidad> implements Serializable { public BasicEntidadController(EntidadBean<T> entidadSessionBean) {....} // other methods } 为什么WELD试图创建这个抽象/无bean类的代

我有一个带参数化构造函数的参数化抽象类:

public abstract class BasicEntidadController<T extends Entidad> implements Serializable {

     public BasicEntidadController(EntidadBean<T> entidadSessionBean) {....}
     // other methods
}
为什么WELD试图创建这个抽象/无bean类的代理

如果我只想在EL expresion中插入/使用树中的最后一个子级,我必须在继承树中执行所有类的代理功能吗


提前感谢。

根据定义,java bean“类必须有一个公共默认构造函数(没有参数)。”

我建议您将构造函数更改为

public BasicEntidadController() {....}
     // other methods
然后添加一个setter方法

setEntidadSessionBean(EntidadBean<T> entidadSessionBean)
setEntidadSessionBean(EntidadBean entidadSessionBean)
或者更好——阅读关于依赖性注射的文章。然后你可以使用

@Autowired
EntidadBean<T> entidadSessionBean;
@Autowired
EntidadBean entidadSessionBean;


希望这有帮助

异常消息提到了-managedbean[class org.wgualla.sandbox.tienda.TiendaController],抱怨是-has-no-args构造函数。可能消息不是那么直截了当,但请尝试添加一个无参数构造函数。是的,谢谢。这是最简单的方法。如果这个类是抽象的,并且永远不会被实例化,我想知道weld为什么要尝试创建代理。因为任何符合注入条件的东西都需要遵循这些要求。这是围绕CDI和托管bean的陷阱之一。这意味着我不能在整个项目中拥有一个不满足CDI要求的类?在类层次结构中,不可以。你可以否决该底层类作为替代。
setEntidadSessionBean(EntidadBean<T> entidadSessionBean)
@Autowired
EntidadBean<T> entidadSessionBean;