我想使用 sling taglib 在我的 jsp 中实例化一个服务对象。在正常情况下,服务类仅由 1 个类实现,这非常简单:-
RegistrationService registrationService = sling.getService(RegistrationService.class);
但是如果服务类有超过 1 个实现类,那么我们如何确保为特定类实例化对象。
我的java类是这样的:-
1. 接口(interface):RegistrationService
2. 实现类1:-
@Properties({@Property(name = "datasource", value = "SBWS"})
@Service
public class RegistrationServiceImpl implements RegistrationService{
}
3. 实现类2:-
@Properties({@Property(name = "datasource", value = "SOLR"})
@Service
public class RegistrationServiceImpl implements RegistrationService{
}
我如何确保使用
RegistrationService registrationService = sling.getService(RegistrationService.class);
在 jsp 中将为实现类 1 实例化服务
最佳答案
使用SlingScriptHelper#getServices(...)
方法,该方法允许指定过滤器:
RegistrationService[] services = sling.getServices(RegistrationService.class, "(datasource=SBWS)");
if (services.length > 0) {
// services[0] contains your service
}
获取 OSGi 服务并通过属性过滤它是相当低级的事情,请考虑将其从 JSP 移至 Java 类。
关于osgi - 使用 SlingScriptHelper#getService() 方法过滤 OSGi 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26254712/