我有一个带有参数化构造函数的参数化抽象类:
public abstract class BasicEntidadController<T extends Entidad> implements Serializable {
public BasicEntidadController(EntidadBean<T> entidadSessionBean) {....}
// other methods
}
以及扩展它的子类:
@SessionScoped
@Named
public class TiendaController extends BasicEntidadController<Tienda> implements Serializable {...}
和WELD报告错误告诉我“BasicEntidadController”不可代理….
org.jboss.weld.exceptions.UnproxyableResolutionException: WELD-001435 Normal scoped bean class org.wgualla.sandbox.entity.BasicEntidadController is not proxyable because it has no no-args constructor - Managed Bean [class org.wgualla.sandbox.tienda.TiendaController] with qualifiers [@Any @Default @Named].
为什么WELD试图创建这个抽象/无bean类的代理???
如果我想在EL表达式中注入/使用树中的最后一个子项,我必须在继承树,可代理项中执行所有类吗?
提前致谢.
最佳答案 根据定义,java bean具有“该类必须具有公共默认构造函数(不带参数)”.
见http://en.wikipedia.org/wiki/JavaBeans#JavaBeans_API
我建议你改变你的构造函数
public BasicEntidadController() {....}
// other methods
然后添加一个setter方法
setEntidadSessionBean(EntidadBean<T> entidadSessionBean)
甚至更好 – 阅读有关依赖注入的信息.然后你可以使用类似的东西
@Autowired
EntidadBean<T> entidadSessionBean;
见http://www.vogella.com/articles/SpringDependencyInjection/
希望这可以帮助