【发布时间】:2018-04-13 05:18:37
【问题描述】:
我需要将CacheService 注入到各种bean 中,并维护CacheService 的单例扩展,称为ResourceCacheService。
interface CacheService{}
@Default
class CacheServiceImpl implements CacheService{}
@Singleton
class ResourceCacheService extends CacheServiceImpl{}
或者更好:
interface ResourceCacheService extends CacheService{}
@Singleton
class ResourceCacheServiceImpl extends CacheServiceImpl{}
无论哪种方式,我都会遇到一个模棱两可的异常。如何在需要的地方注入 CacheService 的新实例,以及创建它的 Singleton 版本?
更新 - 添加异常
Caused by: org.apache.openejb.OpenEJBRuntimeException: org.apache.webbeans.exception.WebBeansDeploymentException: javax.enterprise.inject.AmbiguousResolutionException: There is more than one Bean with type com.project.cache.CacheServiceQualifiers: [@javax.enterprise.inject.Default()]
ResourceCacheService, WebBeansType:MANAGED, Name:null, API Types:[com.project.web.ResourceCacheService,com.project.cache.CacheService,java.lang.Object,com.project.cache.CacheServiceImpl], Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any] from file:/application/webapps/ROOT/WEB-INF/classes/com/project/web/ResourceCacheService.class
CacheServiceImpl, WebBeansType:MANAGED, Name:null, API Types:[com.project.cache.CacheService,java.lang.Object,com.project.cache.CacheServiceImpl], Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any] from file:/application/webapps/ROOT/WEB-INF/classes/com/project/cache/CacheServiceImpl.class
【问题讨论】:
-
你从定义中得到一个异常?或注射?使用
@Named有帮助吗?还是CDI qualifiers? -
它在 cdi init 期间出现运行时异常。在我的场景中提供一个@Named 示例
-
运行时异常可以是或。如果您实际上提供了您在问题中遇到的例外情况,这将很有帮助,这样我们就不必猜测了。
-
添加了异常。我知道
@Named和CDI 限定符,但如果可能的话想避免。我认为我在想@Named在这里很有意义
标签: jakarta-ee cdi