定制球衣 class 会员注入异常

Custom jersey class member injection exception

我已经创建了一个自定义的可注射供应商,我已经尝试了两种方法:

1)

@Provider
public static final class PrincipleInjectableProvider extends PerRequestTypeInjectableProvider<Context, Principal>
{
    public PrincipleInjectableProvider()
    {
        super(Principal.class);
    }

    @Override
    public Injectable<Principal> getInjectable(final ComponentContext ic, final Context a)
    {
        return new AbstractHttpContextInjectable<Principal>() {

            @Override
            public Principal getValue(final HttpContext c)
            {
                return c.getRequest().getUserPrincipal();
            }
        };
    }

}

2)

@Provider
public static final class PrincipleInjectableProvider extends AbstractHttpContextInjectable<Principal>
    implements InjectableProvider<Context, Type>, Injectable<Principal>
{

    @Override
    public ComponentScope getScope()
    {
        return ComponentScope.PerRequest;
    }

    @Override
    public Injectable<Principal> getInjectable(final ComponentContext ic, final Context a, final Type c)
    {
        return this;
    }

    @Override
    public Principal getValue(final HttpContext c)
    {
        return c.getRequest().getUserPrincipal();
    }
}

我确保将此 class 添加到我的资源配置中:

final ResourceConfig resourceConfig = new DefaultResourceConfig(PrincipleInjectableProvider.class);

在我的 REST 资源中,我尝试像这样注入 class:

@Context
private Principal _principal;

我最初计划使用一个名为 @Principal 的单独注释,但我现在决定让这项工作生效。

当我尝试将其作为方法参数注入时,它成功了(对可注入的 class 进行了一些更改以实现

InjectableProvider<Context, Parameter> 

改为)

但我似乎无法将其作为 class 成员注入..

这是我收到的异常消息:

Missing dependency for field: private com.....principal.Principal com.....net.TestResource._principal

我浏览了所有其他相关的帖子,但找不到解决方案。大多数已通过更改

得到修复
InjectableProvider<Context, Parameter>

InjectableProvider<Context, Type>

请帮我找出我做错了什么, 我试过球衣 1.12 和 1.18。

最后我发现我的问题是我们的资源是单例的,因此这些按请求可注入的提供程序无法工作。 相反,我实现了一个 signleton 可注入提供程序,其工作方式类似于 @Context 的工作方式,具有代理和本地线程。