我想使用sling taglib在我的jsp中实例化一个服务对象。在正常情况下,服务类只由一个类实现,非常简单: -
RegistrationService registrationService = sling.getService(RegistrationService.class);
但是如果服务类有多个实现类,那么我们如何确保为特定类实例化对象。
我的java课程如下: -
1.接口:注册服务
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
答案 0 :(得分:5)
使用SlingScriptHelper#getServices(...)
方法,该方法允许指定过滤器:
RegistrationService[] services = sling.getService(RegistrationService.class, "(datasource=SBWS)");
if (services.length > 0) {
// services[0] contains your service
}
获取OSGi服务并通过属性过滤它是非常低级的东西,考虑将其从JSP移动到Java类。