Java EE 6 的优点之一是新的依赖项注入框架 - 具有 Weld 参考实现的 CDI - 它促使我们开始以与实现无关的方式内部迁移到 JSR-330,其明确目标是能够拥有核心 jar 被冻结,然后能够添加额外的 jar,提供新的模块来替换核心 jar 中的功能。
我现在正在与 Weld 一起完成上述工作,坦率地说,幕后有太多的魔力。它要么有效,要么无效,并且默认情况下它不会对发生的情况提供太多帮助,因此您可以调查问题所在并修复它。
我希望有一些开关可以轻松实现以下功能:
- 扫描哪些类路径条目以及在哪里扫描?结果如何?
- 哪些豆类可用于哪个类别的注射?
- 是什么导致稍后不考虑给定的 bean?给定的罐子?
换句话说,我需要更详细地了解决策过程。由于某种原因,Guice 并不需要这样做,也许是因为魔法少得多,也许是因为错误消息非常好。
您如何调试 Weld 应用程序?它有多大帮助?
简短的回答:CDI 没有专用的调试选项(因为规范不需要这样的东西),Weld 也没有专用的调试选项。
长答案:您可以自己做很多事情。熟悉一下CDI的扩展机制 http://docs.jboss.org/weld/reference/1.1.0.Final/en-US/html/extend.html,您会发现您可以轻松(真的!)编写自己的扩展来调试您所需的信息
扫描哪些类路径条目
在哪里?结果如何?
听ProcessAnnotatedType
-Event
哪些豆类可以注射
哪个班级?
查询 BeanManager 即可。
是什么导致给定的 bean 不被
以后考虑?给定的罐子?
听AfterBeanDiscovery
- 事件并查看 BeanManager 中的内容。基本上,以下场景使 ManageBean 不符合注入条件:
- 它不是 ManagedBean (就像 jar 中没有 beans.xml 一样)
- 它不符合托管 Bean 的资格(https://docs.jboss.org/weld/reference/1.1.0.Final/en-US/html/beanscdi.html#d0e794 https://docs.jboss.org/weld/reference/1.1.0.Final/en-US/html/beanscdi.html#d0e794)
- 它没有 BeanType (
@Type{}
)
- 它被否决(缝焊)或被任何其他扩展机制抑制
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)