我正在尝试使用Karaf Blueprint DI和OSGi Bundles将一些外部数据注入到类中。
配置文件位于Karaf home下的etc / com.company.feature.config.cfg中,它包含以下参数:attr1=test1
我的目标是每次调用或使用MyClass的对象时都使用此参数。所以文件是红色的。请注意,在Karaf运行期间,该文件不会更改。
我的问题是,在安装或更新我的软件包后,我可以在控制台中看到该值。在此之后,当调用此类的对象时,该值将设置为null
蓝图配置,OSGI-INF / blueprint / context.xml:
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"... >
...
<!--
The file is located on etc/com.company.feature.config.cfg under Karaf,
and it contains "attr1=test1"
-->
<cm:property-placeholder persistent-id="com.company.feature.config" update-strategy="reload">
<cm:default-properties>
<cm:property name="attr1" value=""/>
</cm:default-properties>
</cm:property-placeholder>
<bean id="my-bean" class="package.MyClass" init-method="init">
<property name="attribute" value="${attr1}" />
</bean>
</blueprint>
Java MyClass类:
class MyClass {
private String attribute;
//getter and setter
public MyClass(){
init();
}
private void init(){
System.out.println("data : " + attribute);
}
}
Karaf输出:
karaf@root()> data : null
答案 0 :(得分:2)
您在构造函数中调用init。此时该属性尚未设置。 删除此调用,它应该可以工作。
另一个探测器可能是init是私有的。我不确定蓝图是否可以将其称为init-method。