确定 ServiceLocator 没有用户定义的服务
Determine ServiceLocator has no user defined services
我正在尝试制作一个可重用的组件,它根据居民文件中定义的服务创建 ServiceLocator
。我需要确定 ServiceLocator
是否有除内置服务之外的服务。如果没有,可能会向用户记录一些警告。像
ServiceLocator locator = ServiceLocatorUtilities.createAndPopulateServiceLocator();
List<?> services = locator.getAllServices(BuilderHelper.allFilter());
if (services.isEmpty()) {
LOGGER.log(Level.WARNING,
"No services. Make sure inhabitants generator is working correctly.");
}
这当然行不通,因为 services
仍然包含所有内置服务。我可以创建一个 Filter
像
public class NonBuiltInFilter implements Filter {
private static final Set<String> builtInClasses = new HashSet<>(
Arrays.asList("org.jvnet.hk2.internal.ServiceLocatorImpl",
"org.jvnet.hk2.internal.ThreeThirtyResolver",
"org.jvnet.hk2.internal.DynamicConfigurationServiceImpl",
"org.jvnet.hk2.internal.DefaultClassAnalyzer",
"org.jvnet.hk2.internal.ServiceLocatorRuntimeImpl",
"org.jvnet.hk2.internal.InstantiationServiceImpl")
);
@Override
public boolean matches(Descriptor d) {
return !builtInClasses.contains(d.getImplementation());
}
}
...
List<?> services = locator.getAllServices(new NonBuiltInFilter());
这现在可行,但这不是一个很好的解决方案,因为那些 类 可能随时更改。
所以我只是想知道除了内置服务之外,是否有任何标准方法可以检查 ServiceLocator
是否有任何服务。或者其他不像上面 Filter
那样脆弱的解决方法。
在 hk2-locator 模块中的最新版本的 hk2 中,有一个 API returns 您正在寻找的过滤器:
这必须在实现模块中,因为另一个实现可能有一组不同的初始服务,所以它不是一个通用功能。鉴于此,我所知道的 hk2 没有其他实现,所以它仍然很通用!
我正在尝试制作一个可重用的组件,它根据居民文件中定义的服务创建 ServiceLocator
。我需要确定 ServiceLocator
是否有除内置服务之外的服务。如果没有,可能会向用户记录一些警告。像
ServiceLocator locator = ServiceLocatorUtilities.createAndPopulateServiceLocator();
List<?> services = locator.getAllServices(BuilderHelper.allFilter());
if (services.isEmpty()) {
LOGGER.log(Level.WARNING,
"No services. Make sure inhabitants generator is working correctly.");
}
这当然行不通,因为 services
仍然包含所有内置服务。我可以创建一个 Filter
像
public class NonBuiltInFilter implements Filter {
private static final Set<String> builtInClasses = new HashSet<>(
Arrays.asList("org.jvnet.hk2.internal.ServiceLocatorImpl",
"org.jvnet.hk2.internal.ThreeThirtyResolver",
"org.jvnet.hk2.internal.DynamicConfigurationServiceImpl",
"org.jvnet.hk2.internal.DefaultClassAnalyzer",
"org.jvnet.hk2.internal.ServiceLocatorRuntimeImpl",
"org.jvnet.hk2.internal.InstantiationServiceImpl")
);
@Override
public boolean matches(Descriptor d) {
return !builtInClasses.contains(d.getImplementation());
}
}
...
List<?> services = locator.getAllServices(new NonBuiltInFilter());
这现在可行,但这不是一个很好的解决方案,因为那些 类 可能随时更改。
所以我只是想知道除了内置服务之外,是否有任何标准方法可以检查 ServiceLocator
是否有任何服务。或者其他不像上面 Filter
那样脆弱的解决方法。
在 hk2-locator 模块中的最新版本的 hk2 中,有一个 API returns 您正在寻找的过滤器:
这必须在实现模块中,因为另一个实现可能有一组不同的初始服务,所以它不是一个通用功能。鉴于此,我所知道的 hk2 没有其他实现,所以它仍然很通用!