2013-06-27 4 views
4

У меня есть параметризованный абстрактный класс с одним параметризованного конструктору:почему я не могу вводить ребенок боб класс не боб абстрактного родительского класса

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" не proxyable ....

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 expresion только последний ребенок в дереве?

Заранее спасибо.

+0

Сообщений об исключении упоминания - * Управляемый компонент [класс org.wgualla.sandbox.tienda.TiendaController] * и жалоба - * не имеет конструктора no-args *. Может быть, сообщение не так прямо, но попробуйте добавить конструктор no-arg. –

+0

Да, спасибо. Это простой способ. Я мог бы знать, почему сварка пытается создать прокси-сервер, если этот класс является абстрактным и никогда не будет вызван. – wgualla

+1

, потому что все, что подходит для инъекций, должно соответствовать требованиям. Это одна из тех проблем, связанных с CDI и управляемыми бобами. –

ответ

2

По определению java bean имеет «класс должен иметь открытый конструктор по умолчанию (без аргументов)».

См http://en.wikipedia.org/wiki/JavaBeans#JavaBeans_API

Я хотел бы предложить вам изменить свой конструктор

public BasicEntidadController() {....} 
    // other methods 

, а затем добавить метод установки

setEntidadSessionBean(EntidadBean<T> entidadSessionBean) 

Или еще лучше - прочитать о зависимостях инъекции. Вы можете использовать что-то вроде

@Autowired 
EntidadBean<T> entidadSessionBean; 

См http://www.vogella.com/articles/SpringDependencyInjection/

Надеется, что это помогает