我知道这种问题会重新出现,但我想知道是否有办法手动实例化一个bean(使用新的Xxxx())并完成注射。 也许使用BeanManager但我找不到如何。
如果不可能,我想知道为什么不这样做。从概念上讲,我没有找到使其成为可能的充分理由。
感谢您的解释。
P.S:我正在使用JBoss 7.1.1和Weld CDI容器。
JM。
答案 0 :(得分:4)
因为CDI背后的基本概念是范围及其相关背景的概念。这是上下文和依赖注入中的上下文。基本上,具有范围的bean具有明确定义的生命周期,但是当您自己实例化bean时,不再知道它的生命周期是什么。阅读CDI规范的2.4 Scopes部分。
为了让您获得更多洞察力 - CDI不仅@Inject
您的依赖关系,还管理其生命周期。这不仅仅是对于bean实例本身,而且对于所有依赖实例,都超出了简单的instanciation和依赖注入,直到终止(调用@PreDestroy
)。当你自己实例化bean时,无法知道何时做最后一部分。