2012-03-09 3 views
2

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

Теперь наступает моя проблема. Можно загружать и создавать экземпляр любого класса с помощью отражения, но в этом случае невозможно было бы загружать классы, чтобы получить что-либо введенное. Поэтому необходимо получить экземпляр этих классов, поскольку он будет внутренне выполнен сервером, например, когда мы будем использовать аннотацию @ javax.inject.Inject.

Есть ли способ загрузить классы другого CDI-контейнера таким образом, чтобы они все еще могли работать с Injections (иначе это не имело бы смысла ^^)? Может быть, есть класс, который отвечает за обработку всех этих классов, так что я могу просто указать ему имя класса для загрузки (как я бы сделал это с отражениями) ...?

Благодаря

ответ

4

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

0

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

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

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