2015-12-10 44 views
0

Blueprint <bean>标记创建的实例是否可以通过使用OSGi声明式服务机制指定的服务引用自动注入?Can Blueprint 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){ 
    ... 
    } 

如果我在@Component通过immediate=true实例,然后我的DataSource OSGi服务注入。如果我通过蓝图<bean class="DatabaseThing">创建实例,则不会发生自动注入。

我有一个看看白羊座源,它似乎是服务注入特定于org.apache.aries.blueprint.container.ServiceRecipe,而不是它用于<bean>风格的实例化...BeanRecipe一部分。

回答

1

这是行不通的。 DS注释由bnd处理并生成DS xml文件,然后在运行时由felix scr进行评估。在这种情况下,对象的完整生命周期由scr控制。

如果您另外声明同一个类的蓝图bean,那么它将是一个单独的实例。 Blueprint可以将服务和Bean注入到此实例中,但它与DS完全断开连接。

如果您主要关注的是蓝图注射使用注射,那么我建议blueprint-maven-plugin。它允许在代码中使用CDI和Java EE注释。这些在构建时转换为blueprint.xml。因此,结果与DS相似,但以蓝图为依托。

+0

非常感谢基督教徒 - 我尽可能多地想,但您的确认感谢。 pax-cdi注释看起来像是我所需要的 - 我只想尽可能少编写代码! –