java - Weld/CDI 的最佳调试技巧是什么?

标签 java java-ee-6 cdi jboss-weld jsr330

Java EE 6 的一大优点是新的依赖注入(inject)框架 - 带有 Weld 引用实现的 CDI - 这促使我们开始以与实现无关的方式在内部迁移到 JSR-330,其明确目标是能够拥有一个被卡住的核心 jar,然后能够添加额外的 jar,提供新的模块来替换核心 jar 中的功能。

我现在正在与 Weld 一起完成上述工作,坦率地说,幕后的魔法实在是太多了。它要么起作用,要么不起作用,并且默认情况下它不会对发生的事情提供太多帮助,因此您可以调查问题并修复它。

我希望有一些开关可以轻松启用以下功能:

  • 扫描了哪些类路径条目以及在哪里扫描?结果如何?
  • 哪些 bean 可用于哪个类的注入(inject)?
  • 是什么导致给定的 bean 在以后不被考虑?给定的 jar ?

换句话说,我需要更详细地了解决策过程。出于某种原因,这不是 Guice 所需要的,可能是因为魔法少得多,也可能是因为错误消息非常好。

您如何调试 Weld 应用程序,它有多大帮助?

最佳答案

简短回答:CDI 没有专门的调试选项(因为规范没有要求),Weld 也没有专门的调试选项。

长答案:您可以自己做很多事情。熟悉extension mechanism of CDI ,您会发现您可以轻松(真的!)编写自己的扩展程序来调试所需信息

What classpath entries are scanned and where? What was the result?

监听ProcessAnnotatedType-Event

What beans are available for injection for which class?

为此查询 BeanManager。

What caused a given bean not to be considered for later? A given jar?

收听 AfterBeanDiscovery-Event 并查看您在 BeanManager 中得到了什么。基本上,以下情况会使 ManageBean 无法注入(inject):

关于java - Weld/CDI 的最佳调试技巧是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4850215/

相关文章:

java - SimpleDateFormat 将字符串转换为日期

java.net.bindexception地址已经在多台tomcat上运行

java - 最简单的 JSF 2.0 应用程序将无法运行

multithreading - CDI 多线程

jsf - 获取具有其他名称的 session 作用域 bean 的新实例

java - Android中如何实现后台任务

Java:生成具有对数分布的随机数

java - 在 EJB 3.1 中控制 CDI 启动

servlets - @WebServlet 注释和错误 404

java - weld-osgi、pax-cdi 和fighterfish 之间有什么区别