是否有相应的CDI(WELD)来构建定义(如Guice模块中所做的那样),然后创建一个Injector?

mP.*_*mP. 19 guice cdi jboss-weld

我喜欢Guice如此直接地手动创建自己的模块的方式,每个模块都有自己的代码绑定.另一方面,CDI似乎更多地依赖于魔术而不是程序化访问sest绑定.我错了,或者如何用WELD达到同样的效果.

任何代码示例将不胜感激......

澄清

我希望使用Guice在http://code.google.com/p/google-guice/上提供的构建器模式样式,以编程方式构建一个模块(Guice术语,我不确定CDI术语).

我正在构建一个动态系统,我需要能够绑定类型(如接口),常量等,而不仅仅是让Weld动态扫描类路径等并查找和注册类型.我相信CDI是静态的,javax.inject包不包含允许以编程方式将类型绑定到实现的任何接口.

澄清第2部分

原始问题的基本前提是简单的观察,即注释被烘焙,并且在其中定义的规则可以帮助无法更改注释器.我最初希望公共访问CDI类路径扫描程序用于构建内部使用定义的相同接口.基本上我说的是,我想要一个允许我读取注释并为容器创建定义的图层.默认提供程序可以是执行现在发生的操作的提供程序,但如果您需要其他策略,则可以执行此操作.

当前方法的一个问题是不能重用具有不同注释的组件(类)来选择不同的协作者的限制.在您跳转之前让我对此声明进行限定,是的,可以通过提供商等来完成,但这会导致更多的工件.应该有一个更简单的方法.

例1

很抱歉,如果这个例子不好,我的用例就会更加复杂,细节也会受到阻碍,并且需要更长时间的阅读.

想象一下有一个url重写组件,为了论证,有一些参数,如

  • 用该模式替换此模式.
  • 也许是一个html清洁工

如果您希望使用两个不同的替换规则注入相同的组件但是使用html清洁器注入器,则卡住了.当然有办法解决这个问题,但他们需要人工制品,这当然是更多的代码.

遗憾的是,所有绑定规则都在类而不是实例上,因此每次你要求一个类时,你都会得到几乎相当于实例的实例.

焊接

这个问题是在一段时间之前写的,我已经放弃了Weld.我相信它决定魔术如何完成的方式是错误的.我不喜欢这样的事实,即如果没有为我提供控制何时或如何重复此操作的方法,他们会向我发出这种情况.我不喜欢这种不灵活性.

Jos*_*vis 7

我经常使用Guice和CDI/Seam2.简短的回答是否定的,CDI不支持程序化的bean定义('绑定',正如Guice所说的那样).

CDI使用声明式方法,容器将自动扫描bean定义.这种可定制的"替代品"的特点在一定程度上,但它并不像Guice的编程方法灵活的(在这里你可以做任何事情基本上).


我的两分钱

我使用两个框架:Guice用于"低级"非企业POJO组件(我没有/需要CDI功能),CDI用于任何需要CDI额外功能的东西,插入JSF或EJB3的东西.主要是我开始使用Guice作为在"适配器"JVM中获取DI的一种方式,它运行应用程序服务器集群.随着我越来越熟悉CDI,我发现对Guice的需求较少.我认为,当CDI支持"非托管"实例时,我可以用CDI替换Guice(例如,焊接).

RE:焊接'魔术' - IMO没有什么是关于bean定义扫描的"魔力".它在CDI规范中确实很明确,它类似于其他Java Enterprise框架,如JPA和EJB3.

我的建议是:

  1. 使用适合你的方法.如果您不喜欢CDI,请不要使用它.例如,我在我的应用程序中需要"非托管实例",因此我使用Guice.
  2. 如果您认为CDI可能会更好(我这样做),请参与 - 参与定义CDI的社区.