当前位置: 首页 > 面试题库 >

ServiceLocator如何在HK2中自动找到@Service和@Contact?

耿锦
2023-03-14
问题内容

根据HK2 @Service
javadoc

放置在要 自动 添加到hk2 ServiceLocator的类上的注释。

我不知道如何ServiceLocator自动查找带注释的类。

测试服务

@Contract
public interface TestService {

}

TestServiceImpl

@Service
public class TestServiceImpl implements TestService {

}

主要

public static void main(String[] args) {
    ServiceLocator locator = ServiceLocatorUtilities.createAndPopulateServiceLocator();

    TestService service = locator.getService(TestServiceImpl.class);    
    System.out.println(service); // null
}

结果总是null。我要补充Descriptor,因此ServiceLocator可以找到它。

public static void main(String[] args) {
    ServiceLocator locator = ServiceLocatorUtilities.createAndPopulateServiceLocator();

    DynamicConfigurationService dcs = locator.getService(DynamicConfigurationService.class);
    DynamicConfiguration config = dcs.createDynamicConfiguration();
    config.bind(BuilderHelper.link(TestServiceImpl.class).to(TestService.class).in(Singleton.class).build());
    config.commit();

    TestService service = locator.getService(TestServiceImpl.class);    
    System.out.println(service); // TestServiceImpl instance
}

如何让我ServiceLocator自动查找带注释的类?我误会了吗?


问题答案:

您需要对已构建的类运行hk2-inhabitant-
generator
才能自动检测服务。有更多的信息在这里为好。

该步骤在构建过程中要做的是创建一个名为META-INF / hk2-locator /
default的文件,其中包含有关服务的信息。然后,createAndPopulateServiceLocator调用读取这些文件,并将这些服务描述符自动添加到返回的ServiceLocator中。



 类似资料:
  • 我想创建一个类的单例实例,这个类不是作为资源或服务在Jersey中涉及的,但希望它的依赖项从Jersey ServiceLocator中注入。 我可以在ResourceConfig构造函数中手动注册该类,然后将ResourceConfig传入Grizzly工厂方法,如下所示:

  • 问题内容: 通过将应用程序ServiceLocator桥接到Jersey ServiceLocator,我们正在使用来将在一个ServiceLocator中创建的现有Singleton应用程序服务注入Jersey RESTful Web服务。 但是,没有使用“外部”定位器中存在的Singletons- 将每个服务注入到Jersey服务中后都会再次创建它们。似乎Singleton仅在ServiceL

  • 我们正在使用using通过将app ServiceLocator桥接到Jersey ServiceLocator中,将在一个ServiceLocator中创建的现有单例应用程序服务注入到Jersey RESTful Web服务中。 然而,存在于“外部”定位器中的单例并没有被使用--每个服务都是在注入到Jersey服务中时再次创建的。单例似乎只在ServiceLocator的范围内可见,即使它是桥接

  • 继续主题泽西岛2 HK2 - @ApplicationScoped不起作用。 我已经知道如何绑定类,以便正确地它们。 你有什么想法,如何自动化这个过程?在我的应用程序中,将每个服务都放在语句中似乎非常难闻。

  • 在我的应用程序中,我需要根据用户输入获得不同的实现。 到目前为止,我所做的只是通过在启动时使用和绑定到实现的接口注入服务: 然而,现在我需要根据用户输入动态获取一个实现。有25种不同的实现都使用相同的接口。 这意味着,我不能再简单地使用方法。相反,我认为我需要用单独注册它们。 我需要来自HK2的实例,因为Impl也使用注入的服务,所以我不能简单地创建一个新的实例。

  • 目前在我们的项目中,我们正在使用spring框架。由于一些项目需求,我们计划在我们的项目中实现Spring集成框架。 我打算抛出Spring集成示例(Spring集成Rest HTTP路径使用演示)应用程序 下面是应用程序Context-http-int.xml文件 根据我的理解,流程就像当输入通道中有消息时,员工搜索服务将被激活。但是根据我们的项目要求,我们需要在运行时根据一些头值激活服务,比如