我想使用吊索taglib在我的jsp中实例化服务对象。在仅由1个类实现服务类的正常情况下,它非常简单:

RegistrationService registrationService = sling.getService(RegistrationService.class);

但是,如果服务类具有多个实现类,那么我们如何确保为特定类实例化对象。

我的java课就像:-
1.接口: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类。

08-19 09:12