2015-12-01 2 views
1

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

Кусок кода:

@Named(value = "LoginView") 
@RequestScoped 
public class LoginView implements Serialization { 
    private static final long serialVersionUID = 1L; 

    @Inject 
    private UserContext userContext; 

} 
@Named 
@ApplicationScoped 
public class UserContext implements Serialization { 

    public UserContext(String app, String prod, List<String>prodLines) { 
     this.app=app; 
     this.prod=prod; 
     this.prodLines = prodLines; 
    } 
} 

я получаю:

org.weld.exceptions.DeploymentExceptions: неудовлетворенные зависимости для типа [UserContext] с классификаторов [@Inject ] точка впрыска.

Если я пытаюсь удалить @Inject вопрос развертывания фиксируется, но объект UserContext является недействительным, так бросает NullPointerException. Я не использую EJB, поэтому не могу использовать @EJB вместо @Inject.

+1

Проверьте наличие ошибок. Я подозреваю, что CDI не может построить «UserContext» из-за отсутствия информации о конструкторе или отсутствующем конструкторе no-arg. – Thomas

+1

Возможная проблема заключается в том, что 'UserContext' не может быть создан, поскольку он не имеет конструктора без аргументов. Вам нужно либо сообщить инфраструктуре DI, какие аргументы конструктора использовать или создать конструктор без аргументов, и ввести три параметра с помощью '@ Inject' или через сеттеры. –

+0

@JiriTousek Хорошая точка. Благодаря!! – Harleen

ответ

1

Проблема решена путем создания конструктора без аргументов в UserContext. Был создан параметризованный конструктор, поэтому инъекция CDI не могла вызвать конструктор по умолчанию. Мы явно создали конструктор no-argmument по умолчанию, поэтому обработка CDI работала. Создан beans.xml для исправления неудовлетворенных и неоднозначных зависимостей и добавлен в META-INF. Если вы явно включили @Alternative bean, который реализует тип bean и имеет соответствующие типы квалификаторов, используйте beans.xml.

Смежные вопросы