如何解决JAX-RS中基于构造函数的注入问题
解决JAX-RS构造函数注入依赖缺失问题
从报错信息可以明确,HK2容器无法找到TestImpl和ReportImpl的实例,核心原因是你的ApplicationBinder仅将实现类绑定到了对应接口,未直接注册实现类本身作为可注入类型。以下是两种解决方案:
方案一:依赖接口注入(推荐,遵循依赖倒置原则)
修改装饰器的构造函数,注入接口类型而非具体实现类,同时通过@Named注解指定Binder中配置的实例名称:
import javax.inject.Inject; import javax.inject.Named; public class EnglishTestDecorator implements TestService { private TestService testService; private ReportService reportService; @Inject public EnglishTestDecorator(@Named("testImpl") TestService testService, @Named("reportImpl") ReportService reportService) { this.testService = testService; this.reportService = reportService; } // 实现TestService接口的所有方法 }
方案二:直接绑定实现类(不推荐,违背依赖倒置)
如果必须注入具体实现类,需在ApplicationBinder中额外绑定实现类本身:
public class ApplicationBinder extends AbstractBinder { bind(TestImpl.class).to(TestService.class).named("testImpl").in(Singleton.class); // 额外注册TestImpl作为可注入类型 bind(TestImpl.class).in(Singleton.class); bind(ReportImpl.class).to(ReportService.class).named("reportImpl").in(Singleton.class); // 额外注册ReportImpl作为可注入类型 bind(ReportImpl.class).in(Singleton.class); bind(EnglishTestDecorator.class).to(TestService.class).named("englishTestDecorator").in(Singleton.class); }
额外检查:确保EnglishTestDecorator完整实现了TestService的所有方法,避免其他潜在运行时问题。
内容的提问来源于stack exchange,提问作者keepmoving
相关产品推荐
相关产品推荐

