HK2 居民生成器:如何将工厂绑定到带注释的服务?
HK2 Inhabitant Generator: How to bind a factory to an annotated service?
我在我的 Jersey 应用程序中使用 HK2。要绑定 classes,我正在使用居民生成器 maven 插件。
对于我的 classes 之一,我需要使用工厂来生成实例。在我的应用程序中绑定工厂 class 按预期工作:
register(new AbstractBinder() {
@Override
protected void configure() {
bindFactory(ClientManagerFactory.class).to(ClientManager.class);
}
});
问题是我一注册抽象活页夹就忽略了我的居民文件。
如何通过注解绑定工厂(根本不使用编程绑定器?
如果 HK2 做不到:如何为需要工厂的 class 使用 AbstractBinder
,并为所有其他使用居民文件?
更新:
我的工厂是这样的:
public class ClientManagerFactory implements Factory<ClientManager> {
@Override
public ClientManager provide() {
return ClientManager.fromSettings();
}
@Override
public void dispose(ClientManager instance) {
instance.cleanupResources();
}
}
一个Factory是一个service,稍微有点特殊,因为factory的provide方法也是一个service,所以一个Factoryclass产生两个hk2服务。这意味着工厂本身可以注入其他服务。但这也意味着,当使用自动服务发现(hk2-metadata-generator 或 hk2-inhabitant-genertor)时,您需要使用 @Service.
对其进行注释
注意Factory的作用域和provide方法的作用域可以不同。事实上,如果你在 provide 方法中留下任何范围注释,默认情况下,它会在 PerLookup scope. I have modified your code from above to make it a Factory where both the Factory and the provide method service are in the Singleton 范围内:
@Service
public class ClientManagerFactory implements Factory<ClientManager> {
@Override @Singleton
public ClientManager provide() {
return ClientManager.fromSettings();
}
@Override
public void dispose(ClientManager instance) {
instance.cleanupResources();
}
}
作为旁注,当您使用 @Service 时,默认范围变为 Singleton 这就是提供方法(不能有 @Service 的原因) 默认在 PerLookup 范围内。限定符也可以放在 provide 方法上,在这种情况下,provide 方法返回的服务将使用这些限定符进行限定。
我在我的 Jersey 应用程序中使用 HK2。要绑定 classes,我正在使用居民生成器 maven 插件。
对于我的 classes 之一,我需要使用工厂来生成实例。在我的应用程序中绑定工厂 class 按预期工作:
register(new AbstractBinder() {
@Override
protected void configure() {
bindFactory(ClientManagerFactory.class).to(ClientManager.class);
}
});
问题是我一注册抽象活页夹就忽略了我的居民文件。
如何通过注解绑定工厂(根本不使用编程绑定器?
如果 HK2 做不到:如何为需要工厂的 class 使用 AbstractBinder
,并为所有其他使用居民文件?
更新: 我的工厂是这样的:
public class ClientManagerFactory implements Factory<ClientManager> {
@Override
public ClientManager provide() {
return ClientManager.fromSettings();
}
@Override
public void dispose(ClientManager instance) {
instance.cleanupResources();
}
}
一个Factory是一个service,稍微有点特殊,因为factory的provide方法也是一个service,所以一个Factoryclass产生两个hk2服务。这意味着工厂本身可以注入其他服务。但这也意味着,当使用自动服务发现(hk2-metadata-generator 或 hk2-inhabitant-genertor)时,您需要使用 @Service.
对其进行注释注意Factory的作用域和provide方法的作用域可以不同。事实上,如果你在 provide 方法中留下任何范围注释,默认情况下,它会在 PerLookup scope. I have modified your code from above to make it a Factory where both the Factory and the provide method service are in the Singleton 范围内:
@Service
public class ClientManagerFactory implements Factory<ClientManager> {
@Override @Singleton
public ClientManager provide() {
return ClientManager.fromSettings();
}
@Override
public void dispose(ClientManager instance) {
instance.cleanupResources();
}
}
作为旁注,当您使用 @Service 时,默认范围变为 Singleton 这就是提供方法(不能有 @Service 的原因) 默认在 PerLookup 范围内。限定符也可以放在 provide 方法上,在这种情况下,provide 方法返回的服务将使用这些限定符进行限定。