我正在尝试将 CDI 用于我的 JSF/Java EE 应用程序。我有以下类层次结构:
/**
* base controller class
* also contains some final methods and an inner enum class declaration
*/
public abstract class AbstractCrudController<K, E> implements Serializable {
private Class<E> entityClass;
public AbstractCrudController(Class<E> entityClass) {
this.entityClass = entityClass;
}
// ...
}
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
public class CategoryController extends AbstractCrudController<Long, Category> implements Serializable {
public CategoryController() {
super(Category.class);
}
//...
}
当我尝试在 GF 3.1 上部署应用程序时,我收到以下 CDI/Weld 异常:
严重:加载应用程序时出现异常:WELD-001435 正常范围的 bean 类 com.web.AbstractCrudController 不可代理,因为它没有无参数构造函数。org.jboss.weld.exceptions.UnproxyableResolutionException: WELD-001435 普通范围的 bean 类 com.web.AbstractCrudController 不可代理,因为它没有无参数构造函数。在 org.jboss.weld.util.Proxies.getUnproxyableClassException(Proxies.java:215) 在 org.jboss.weld.util.Proxies.getUnproxyableTypeException(Proxies.java:166) 在 org.jboss.weld.util.Proxies.getUnproxyableTypesException (Proxies.java:191) 在 org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:134) 在 org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:148) 在 org.jboss。焊接引导验证器。
即使我向基类添加了无参数构造函数,Weld 仍然会抱怨该类不可代理,因为它具有最终方法。为什么 WELD 强迫我改变我的班级设计?使用 JSF @ManagedBean 注释一切正常。
我将不胜感激任何帮助。谢谢,西奥