代码之家  ›  专栏  ›  技术社区  ›  mP.

在CDI(WELD)中,是否有一种等价的方法来构建定义(就像Guice模块中所做的那样),然后创建一个注入器?

  •  19
  • mP.  · 技术社区  · 14 年前

    我喜欢Guice让手工创建自己的模块变得相当简单的方式,每个模块都用自己的代码绑定。另一方面,CDI似乎更依赖于magic,而不是sest绑定的编程访问。我错了吗?或者说,如何才能用焊接达到同样的效果呢。

    澄清

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

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

    澄清第2部分

    示例1

    很抱歉,如果这个例子不好,我的用例会涉及更多的内容,细节会妨碍阅读,并使阅读时间更长。

    • 用那个图案代替这个图案。
    • 也许是个html清理器

    如果您想用两个不同的替换规则来注入同一个组件,但是使用了html清理器注入器,那么您就卡住了。当然有办法绕过这个问题,但他们需要人工制品,这当然是更多的代码。

    不幸的是,所有绑定规则都在类上,而不是实例上,因此每次请求一个类时,都会返回一个功能相当的实例。

    这个问题写在前一段时间,我已经放弃了焊接。我相信它的方式来决定它的魔术是错误的。我不喜欢这样的事实,他们命令我如何发生这件事,却没有给我提供一个方法来控制何时或如何重复这一行动。我不喜欢这种死板。

    1 回复  |  直到 13 年前
        1
  •  8
  •   Joshua Davis    13 年前

    我经常使用Guice和CDI/Seam2。简单的回答是

    CDI使用一种声明性方法,容器将自动扫描bean定义。这可以在某种程度上使用“替代”特性进行定制,但它不如Guice的编程方法灵活(基本上可以做任何事情)。


    我的两分钱

    我使用 二者都 框架:用于“较低级别”非企业POJO组件的Guice(我没有/需要CDI特性),CDI用于任何需要CDI额外特性的地方,插入JSF或EJB3的东西。主要是我开始使用Guice作为在“适配器”jvm中获取DI的一种方法,它运行在应用服务器集群的外部。随着我对CDI越来越熟悉,我发现对Guice的需求越来越少。我认为当CDI支持“非托管”实例时,我可以用CDI替换Guice(例如weld se)。

    回复:焊接“魔术”-在我看来,关于bean定义扫描没有什么是“神奇的”。它在CDI规范中定义得非常好,并且与其他Java企业框架(如JPA和EJB3)类似。

    1. 用对你有用的东西 . 如果你不喜欢CDI,就不要用它。例如,我在我的应用程序中需要“非托管实例”,所以我使用Guice。
    2. 参与进来 -参与定义CDI的社区。