У меня есть projectA
, projectB
и projectC
Проекты Eclipse Maven.Weld on Java SE не использует альтернативу
ProjectA
содержит:IMyApi
интерфейс.- "Пустой"
META-INF\beans.xml
файл.
ProjectB
содержит:IMyConfig
интерфейс.MyConfigJndi
реализацияIMyConfig
.MyApiImpl
реализацияIMyApi
, с недвижимостью@Inject private IMyConfig config;
.- "Пустой"
META-INF\beans.xml
файл.
ProjectC
содержит:MyConfigAlter
реализацияIMyConfig
, помеченный как@Alternative
.- a
Main
класс (и метод), который инициализирует Weld SE и извлекает фасольIMyApi
. - a
META-INF\beans.xml
, гдеMyConfigAlter
указан в разделеalternatives
.
Теперь я бег Main
класса, и IMyApi
боба успешно получен (в качестве MyApiImpl
экземпляра). Но такой случай был, в его собственности config
, вводили MyConfigJndi
например, вместо альтернативной версии (MyConfigAlter
)
Я использую Eclipse, Luna + M2Eclipse.
Что я делаю неправильно?
ОБНОВЛЕНИЕ: Я выяснил, что использование @Specializes
вместо @Alternative
решает проблему, но я по-прежнему считаю, что это не правильное решение (в некоторых случаях у меня может не быть доступа к реализации по умолчанию).
UPDATE 2:
Я использую Weld-се, 2.2.10.Final:
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se</artifactId>
<version>2.2.10.Final</version>
<scope>runtime</scope>
</dependency>
И инициализация просто
WeldContainer weld =
new Weld().
initialize();
IMyApi myApi =
weld.
instance().
select(
IMyApi.
class).
get();
Не могли бы вы включить некоторую информацию, например, какую версию сваривания вы используете, как вы загружаете? Тот факт, что специализируется, звучит странно для меня. –
@JohnAment Спасибо за ваш интерес, я добавил запрошенные данные. – SJuan76
Из трех банок, о которых вы упомянули выше, в какой код кода инициализации живут? –