2015-12-10 3 views
0

Могут ли экземпляры, созданные тегом Blueprint <bean>, автоматически вводиться ссылками на службы, указанными с использованием механизма декларативных служб OSGi?Может ли beprint beans иметь @Reference услуги, вводимые автоматически?

import org.osgi.service.component.annotations.Component; 
import org.osgi.service.component.annotations.Reference; 

@Component(service={}) 
public class DatabaseThing{ 
    @Reference 
    public void setDataSource(DataSource ds){ 
    ... 
    } 

Если я создаю экземпляр через immediate=true в @Component тогда мой DataSource сервис OSGi впрыскивается. Если я создам экземпляр по схеме <bean class="DatabaseThing">, то автоматическая инъекция не произойдет.

Я имел взгляд на источнике Овна, и, кажется, что введение услуг является специфичным для org.apache.aries.blueprint.container.ServiceRecipe и не является частью ...BeanRecipe, которая используется для <bean> стиля конкретизации.

ответ

1

Это не работает. Аннотации DS обрабатываются bnd и приводят к XML-файлу DS, который затем будет оцениваться felix scr во время выполнения. В этом случае полный жизненный цикл объекта является контроллером scr.

Если вы дополнительно объявляете бланк проекта для того же класса, то это будет отдельный экземпляр. Blueprint может использовать сервисы и компоненты для инъекций в этом экземпляре, но полностью отключен от DS.

Если ваша главная задача - использовать аннотации для инъекций чертежей, я рекомендую blueprint-maven-plugin. Он позволяет использовать аннотации CDI и Java EE в вашем коде. Они преобразуются в файл blueprint.xml во время сборки. Таким образом, результат похож на DS, но работает по схеме.

+0

Большое спасибо Кристиан - я думал так много, но ваше подтверждение приветствуется. Аннотации pax-cdi выглядят так, как будто они могут быть то, что мне нужно - я просто хочу написать как можно меньше кода! –

 Смежные вопросы

  • Нет связанных вопросов^_^