2015-12-10 41 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註釋看起來像是我所需要的 - 我只想盡可能少編寫代碼! –