Мне нравится, как Guice делает довольно простым создание вручную собственных модулей, каждый со своими привязками, сделанными в коде.CDI, с другой стороны, похоже, больше полагается на магию, а не на программный доступ к привязкам Sest.Я ошибаюсь или как можно достичь того же эффекта с WELD.
Любой пример кода будет оценен ...
РАЗЪЯСНЕНИЕ
Я надеялся построить модуль (Термин Guice Извините, я не уверен в термине CDI) программно, используя стиль шаблона компоновщика, заданный Guice для http://code.google.com/p/google-guice/.
Я строю динамическую систему, и мне необходимо иметь возможность связывать типы(например, интерфейсы), константы и т. д., а не просто, чтобы Weld динамически сканировал путь к классам и т. д., находил и регистрировал типы.Я считаю, что CDI является статическим, пакет javax.inject не включает никаких интерфейсов, позволяющих программно связывать типы с реализациями.
РАЗЪЯСНЕНИЕ ЧАСТЬ 2
Основной предпосылкой первоначального вопроса былопростое наблюдение, что аннотации запекаются и правила, определенные в них, чтобы помочь Инъектору, не могут быть изменены.Первоначально я хотел получить открытый доступ к тем же интерфейсам, которые использует сканер пути к классам CDI для создания определений для его внутреннего использования.По сути, я хочу сказать, что я хочу слой, который позволяет мне читать аннотации и создавать определения для контейнера.Поставщиком по умолчанию может быть тот, который делает то, что происходит сейчас, но если вам нужна какая-то другая стратегия, тогда существует возможность сделать это.
Одна проблема с текущим подходом - ограничение, что нельзя повторно использовать компоненты (классы).) с разными аннотациями для выбора разных соавторов.Прежде чем перейти, позвольте мне оценить это утверждение, да, это может быть сделано с поставщиками и тому подобное, но это приводит к появлению новых артефактов.Должен быть более простой способ.
Example1
Извините, если этот пример плохой, мой вариант использования будет гораздо более сложным, и детали могут помешать его выполнению и сделать его намного длиннее.
Представьте себеу одного есть компонент перезаписи URL, который для аргументов имеет некоторые параметры, такие как
- , замените этот шаблон этим шаблоном.
- может быть html cleaner
ЕслиВы хотите внедрить этот же компонент с двумя разными правилами замены, но у вас есть застрявший инжектор html.Конечно, есть способы обойти это, но они требуют артефактов, что, конечно, больше кода.
К сожалению, все обязательные правила относятся к классу, а не к экземпляру, поэтому каждый раз, когда вы запрашиваете класс, вы возвращаетесь в значительной степенифункционально эквивалентный экземпляр.
WELD
Этот вопрос был написан некоторое время назад, я отказался от Weld. Я считаю, что способ, которым он диктует, как совершается его магия, неверен.Мне не нравится тот факт, что они диктуют мне, как это происходит, не предоставляя мне способа контролировать, когда или как я мог бы повторить это действие.Мне не нравится эта негибкость.