CDI по типу бросает NPE - PullRequest
       8

CDI по типу бросает NPE

0 голосов
/ 31 марта 2019

Я пытаюсь понять CDI.У меня есть интерфейс:

public interface Person {
    public String getName();
}

И класс, который реализует Person:

public class Male implements Person {
    public Male() {}
    @Override
    public String getName() {
        return "ra";
    }
}

В основном классе я попытался:

public class Main {
    @Inject
    private Person person;
    public static void main(String... args) {
        System.out.println(new Main().person.getName());
    }
}

, нокод выше выдает NPE на person.getName().Я создал проект, используя maven, и область действия javaee api compile.Что я делаю не так?

1 Ответ

1 голос
/ 31 марта 2019

Кажется, вы не запускаете контейнер CDI.

Обратите внимание, что любая аннотация в классе похожа на post-it.Это действительно только дополнительная информация, а не реальный код.Эта информация должна быть интерпретирована.Это то, что делает контейнер CDI.Я написал вводную статью для CDI, которая объясняет немного основ: https://jaxenter.com/tutorial-introduction-to-cdi-contexts-and-dependency-injection-for-java-ee-jsr-299-104536.html

Что вам не хватает:

1.) Добавьте пустой META-INF / beansXML-файлИли добавьте аннотацию области видимости @ApplicationScoped в свой класс Male.java.

2.) Добавьте контейнер CDI.Есть несколько вариантов.Если вы хотите использовать контейнер Apache OpenWebBeans CDI, вы можете найти здесь некоторую информацию https://openwebbeans.apache.org/owbsetup_se.html Здесь вы также можете найти рабочий образец

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...