java重写访问限定符_Java CDI:基于限定符动态选择实现?

我正在尝试通过使用CDI使应用程序可扩展,但似乎我缺少一个难题.

我想要的是:

具有全局配置,该全局配置将定义要使用的接口的实现.这些实现将具有@ImplDescriptor(type =“ type1”)之类的注释.

我试过的

@Produces

public UEInterface createUserExit(@Any Instance instance, InjectionPoint ip) {

Annotated annotated = ip.getAnnotated();

UESelect ueSelect = annotated.getAnnotation(UESelect.class);

if (ueSelect != null) {

System.out.println("type = " + ueSelect.type());

}

System.out.println("Inject is ambiguous? " + instance.isAmbiguous());

if (instance.isUnsatisfied()) {

System.out.println("Inject is unsatified!");

return null;

}

// this would be ok, but causes an exception

return instance.select(ueSelect).get();

// or rather this:

for (Iterator it = instance.iterator(); it.hasNext();) {

// problem: calling next() will trigger instantiation which will call this method again :(

UEInterface candidate = it.next();

System.out.println(candidate.getClass().getName());

}

}

该代码接近我所见的示例:@Produces方法将用于选择和创建实例,候选列表被插入为Instance< E>.如果该方法只是创建并返回一个实现,则可以正常工作.我只是不知道如何检查实例E中的候选人.看起来“内容”的唯一方法似乎是Iterator< E>.但是,一旦我调用next(),它将尝试创建实现…但是不幸的是,为此调用了我的@Produces方法,从而创建了无限递归.我想念什么?如何检查候选人并选择一个?当然,我只想实例化其中之一.

在此先感谢您的帮助和提示!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值