在AEM中,我需要配置字符串列表并在多个服务之间共享。完成此任务的最佳方法是什么?该列表需要在运行时配置。
答案 0 :(得分:4)
您可以创建一个配置的专用配置服务,并由需要一个或多个配置值的所有其他OSGi服务引用。
配置服务示例
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.commons.osgi.PropertiesUtil;
import org.osgi.service.component.ComponentContext;
@Service(ConfigurationService.class)
@Component(immediate = true, metatype = true)
public class ConfigurationService {
@Property
private static final String CONF_VALUE1 = "configuration.value1";
private String value1;
@Property
private static final String CONF_VALUE2 = "configuration.value2";
private String value2;
@Activate
public void activate(final ComponentContext componentContext) {
this.value1 = PropertiesUtil.toString(componentContext.get(CONF_VALUE1), "");
this.value2 = PropertiesUtil.toString(componentContext.get(CONF_VALUE2), "");
}
public String getValue1() {
return this.value1;
}
public String getValue2() {
return this.value2;
}
}
这是这类课程的最低要求。但它将创建一个可配置的OSGi服务,您可以在Apache Felix Configuration Manager(/system/console/configMgr
)中进行配置。
注意:在metatype = true
注释中使用@Component
非常重要。
下一步是在"消费"中引用此服务。服务。
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.osgi.service.component.ComponentContext;
@Service(MyService.class)
@Component(immediate = true, metatype = true)
public class MyService {
@Reference
private ConfigurationService configurationService;
@Activate
public void activate(final ComponentContext componentContext) {
this.configurationService.getValue1();
}
}
注意:此示例使用Apache SCR注释,该注释可与开箱即用的AEM一起使用。您可以在官方文档中了解有关此示例(@Service
,@Component
,@Property
,@Reference
)中使用的SCR注释的更多信息:Apache Felix SCR Annotation Documentation