我使用的焊接4.0和我的制作方法之一,我有以下签名:
@Produces
@ConfigurationType
public <T extends IConfiguration> T getConfigurationInstance(InjectionPoint injectionPoint){
<perform some logic, create an instance of class T and return>
}目标是有几种配置。基于ConfigurationType (Database/Server/Datasource blah,blah),返回一个特定类型的配置实例,该实例实现了IConfiguration接口,因此我可以以更可读的格式处理返回的实例,比如JDK14记录或其等效的实例。换句话说,我只想说serverConfigurationInstance.port()来读取端口,其中serverConfigurationInstance是由注入器逻辑生成和返回的。
现在,启动时的焊接容器告诉我如下:
执行Java类时发生异常。焊接-001562:生成器方法返回类型可能不是类型变量或数组类型,其组件类型是类型变量: ERROR @ConfigurationType @在config.ConfigurationInjector.getConfigurationInstance(ConfigurationInjector.java:0)生成公共config.ConfigurationInjector.getConfigurationInstance(ConfigurationInjector.java:0)错误
雅加达焊接文档(4.0.1)或搜索特定的错误代码或消息没有进一步引导我。我做错什么了?
发布于 2021-09-21 20:15:17
如果您查看了规格,它会说:
如果生产者方法返回类型类型是类型变量或数组类型,其组件类型是类型变量,容器将自动检测问题并将其视为定义错误。
这就是你所犯错误的原因。
规范似乎允许从producer方法返回带有类型变量的参数化类型,只要作用域是@Dependent --这是您的情况。类似于:
@Produces
@ConfigurationType
public <T extends IConfiguration> Supplier<T> getConfigurationInstance(InjectionPoint injectionPoint){
<perform some logic, create a supplier of an instance of class T and return>
}但是,这样,容器“魔术”(例如拦截)就会发生在容器对象上,而不是您创建的IConfiguration实例上,这可能是您想要的,也可能不是您想要的。
https://stackoverflow.com/questions/69271568
复制相似问题