Инициализировать Java CDI без сварки? - PullRequest
0 голосов
/ 18 июня 2019

Если я правильно понимаю, Java CDI должен быть независимым от Weld.Но все примеры, которые я вижу, используют Weld для инициализации контейнера.

Я пытаюсь использовать CDI без Weld, потому что, хотя я хотел бы использовать DI, я очень ограничен в памяти.

Вот пример моей LoggerFactory-

@ApplicationScoped
public class LoggerFactory {

    @Produces
    @Singleton
    public Logger getLogger() {
        return LogManager.getLogger("com.myapp");
    }

}

И мои попытки получить его в Main-

Logger logger = CDI.current().select(Logger.class).get();

Когда я это делаю, я получаю Unable to locate CDIProvider.

Можно ли использовать CDI без дополнительных библиотек?Как я могу получить мой Logger в этом случае?

1 Ответ

4 голосов
/ 18 июня 2019

CDI - это спецификация Java EE.Он определяет, как все должно быть сделано, но сам по себе не обеспечивает функциональность.

Weld - эталонная реализация спецификации CDI.Альтернативной реализацией CDI является, например, Apache OpenWebBeans.Любая из этих реализаций сможет предоставить вам возможности CDI.

В Weld есть расширение, которое будет загружать менеджер компонентов CDI в Java SE: https://docs.jboss.org/weld/reference/latest/en-US/html/environments.html#weld-se

Но будьте осторожны, поскольку из-за моего опыта Weld SE потребляет много памяти и требует некоторого времени дляпросканируйте путь к классу для (больших) SE-приложений.

...