gpt4 book ai didi

java - Jersey 2 + HK2 - 类的自动绑定(bind)

转载 作者:搜寻专家 更新时间:2023-10-31 20:00:35 24 4
gpt4 key购买 nike

话题继续 Jersey 2 + HK2 - @ApplicationScoped not working .

我已经知道,如何绑定(bind)类以便正确地@Inject它们。

您有什么想法,如何使这个过程自动化?将每个服务都放在 bind 语句中似乎在我的应用程序中散发出难闻的气味。

最佳答案

在使用 Google 的 Guice 多年之后,我已经习惯了 Just-In-Time binder 的可用性,它允许注入(inject)任意类型而无需任何前期配置。

我也发现必须显式绑定(bind)每个服务的想法是一种糟糕的代码味道。对于需要使用特殊的构建步骤和为填充器添加的初始化代码,我也并不疯狂。

所以我想到了以下 JustInTimeResolver 实现:

/**
* Mimic GUICE's ability to satisfy injection points automatically,
* without needing to explicitly bind every class, and without needing
* to add an extra build step.
*/
@Service
public class JustInTimeServiceResolver implements JustInTimeInjectionResolver {

@Inject
private ServiceLocator serviceLocator;

@Override
public boolean justInTimeResolution( Injectee injectee ) {
final Type requiredType = injectee.getRequiredType();

if ( injectee.getRequiredQualifiers().isEmpty() && requiredType instanceof Class ) {
final Class<?> requiredClass = (Class<?>) requiredType;

// IMPORTANT: check the package name, so we don't accidentally preempt other framework JIT resolvers
if ( requiredClass.getName().startsWith( "com.fastmodel" )) {
final List<ActiveDescriptor<?>> descriptors = ServiceLocatorUtilities.addClasses( serviceLocator, requiredClass );

if ( !descriptors.isEmpty() ) {
return true;
}
}
}
return false;
}
}

在我的项目中,我只需将以下内容添加到我的 Jersey 应用程序配置中的 Binder 中:

bind( JustInTimeServiceResolver.class ).to( JustInTimeInjectionResolver.class );

而且我可以像在 Guice 中那样自动创建绑定(bind)。

关于java - Jersey 2 + HK2 - 类的自动绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37794144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com