如何解决 Jax-RS 中基于构造的注入

问题描述 投票:0回答:1

我在 jax-rs 中编写简单的测试 API。虽然这样做面临着解决基于构造的注入的困难。

以下是服务配置。其中2个服务和1个装饰器类。 TestImpl 和 EnglishTestDecorator 服务继承相同的接口并具有它们的名称。

public class ApplicationBinder extends AbstractBinder {
    bind(TestImpl.class).to(TestService.class).named("testImpl").in(Singleton.class);
    bind(ReportImpl.class).to(ReportService.class).named("reportImpl").in(Singleton.class);
    bind(EnglishTestDecorator.class).to(TestService.class).named("englishTestDecorator").in(Singleton.class);
}

这是装饰器类,在构造级别注入两个依赖项。这个类给出错误。

public class EnglishTestDecorator implements TestService {
    private TestImpl testImpl;
    private ReportImpl reportImpl

    @Inject
    public EnglishTestDecorator(TestImpl testImpl, ReportImpl reportImpl){
        this.testImpl = testImpl;
        this.reportImpl = reportImpl;
    }

}

这是错误: 有人可以帮忙解决这个问题吗?

{"@version":1,"message":"//rest:8080/api/test/testReport/","logger_name":"org.eclipse.jetty.server.HttpChannel","thread_name":"qtp366590980 -14","level":"WARN","level_value":30000,"stack_trace":"javax.servlet.ServletException: javax.servlet.ServletException: A MultiException 有 6 个异常。它们是: 1. org.glassfish.hk2.api.UnsatisfiedDependencyException: SystemInjecteeImpl 处没有可用于注入的对象(requiredType=TestImpl,parent=EnglishTestDecorator,qualifiers={},position=0,optional=false,self=false,unqualified=null ,40643858) 2. org.glassfish.hk2.api.UnsatisfiedDependencyException: SystemInjecteeImpl 处没有可用于注入的对象(requiredType=ReportImpl,parent=EnglishTestDecorator,qualifiers={},position=1,optional=false,self=false,unqualified=null ,1216092469) 3. java.lang.IllegalArgumentException:在尝试解析 org.test.service.decorator.EnglishTestDecorator 的依赖项时发现错误 4. java.lang.IllegalStateException:无法执行操作:在 org.test.service.decorator.EnglishTestDecorator 上解析 5. java.lang.IllegalArgumentException:尝试解析 org.cas.osd.cst.resource.SSOSupportResource 的依赖项时发现错误 6. java.lang.IllegalStateException:无法执行操作:在 org.cas.osd.cst.resource.SSOSupportResource 上解析 在 org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:139) 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134) 在 org.eclipse.jetty.server.Server.handle(Server.java:524) 在 org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:319) 在 org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:253) 在 org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273) 在 org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95) 在 org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93) 在

jax-rs constructor-injection
1个回答
0
投票

我对此做了很多研究,发现它的 JAX-RS 限制无法解析为具体类,这就是注入失败的原因。以下是对我有用的新代码。

@注入 公共 EnglishTestDecorator(@Name("testImpl") TestService testImpl, @Named("reportImpl") ReportServicer eportImpl){ }

© www.soinside.com 2019 - 2024. All rights reserved.