CDI - внедрение классов во время выполнения - PullRequest
2 голосов
/ 09 марта 2012

Я работаю над проектом, в котором необходимо загрузить некоторые классы во время выполнения.Загружаемые классы являются частью CDI-контейнеров и должны иметь возможность вводить некоторые вещи.«Класс загрузки» также является частью CDI-контейнера.

Теперь моя проблема.Можно загрузить и создать экземпляр любого класса с помощью отражения, но в этом случае для классов не будет возможности загрузить что-либо для инъекций.Таким образом, необходимо получить экземпляр этих классов, как это будет сделано внутри сервера, например, когда мы будем использовать аннотацию @ javax.inject.Inject.Контейнер CDI таким образом, что они все еще могут работать с инъекциями (иначе это не имело бы никакого смысла ^^)?Может быть, есть какой-либо класс, который отвечает за обработку всех этих классов, чтобы я мог просто сказать ему имя класса для загрузки (как я бы сделал это с отражениями) ...Спасибо

Ответы [ 2 ]

4 голосов
/ 11 марта 2012

Вы можете использовать API BeanManager для запроса и размещения контекстных ссылок на основе типов компонентов.

0 голосов
/ 10 марта 2012

Внимательно рассмотрите свой дизайн, так как кажется, что вы входите в программирование "процедурного стиля", а не в ОО. Вероятно, это первая из многих проблем с вашим дизайном, с которой вы, вероятно, столкнетесь.

У меня есть идея, которая может сработать; Вы можете заставить эти классы реализовать определенный интерфейс? Если это так, вы можете использовать обычные аннотации @Inject в своем коде с интерфейсом, а затем поместить реализацию класса в каталог / lib на сервере. Это, в сочетании с альтернативами CDI, может дать вам то, что вы хотите.

Лучшим подходом может быть использование отражения и какой-то фабрики ...

...