2016-09-06 86 views
0

我对项目设置有点好奇。CDI在罐子间注入混凝土依赖关系

我有一个项目,我试图更新。

因此,我用@Named(“”)注释对我的一些具体类进行了细化。 该类实际上扩展了实现接口的抽象类。 我想在未包含在该jar中的类上注入命名类。 在做这些时我需要记住哪些注意事项?

回答

1

你的问题非常含糊,所以不要期待这个答案能让你的细节更加眩目。

该类实际上扩展了一个实现接口的抽象类。

这应该不是问题 - 最终的bean实例将具有层次结构中所有类和接口的类型。完全不用担心。

我想在未包含在该jar中的类上注入命名类。

首先,你只能将bean注入到另一个bean中。这意味着你的其他类(不在同一个jar中)必须成为一个bean。为此,您可以在其他存档中启用CDI,并用所需的范围对类进行注释。

其次,另一个jar,必须与@Named bean有依赖关系,以便CDI容器可以看到这些bean。

最后但并非最不重要的一点,请确保您在豆上使用足够的作用域。范围属于特定的上下文,并且每个都有不同的生命周期。因此,例如@ApplicationScoped豆从应用程序启动直到关闭,而@RequestScoped仅在HTTP请求期间处于活动状态。

+0

感谢您的输入。你是对的,这是一个模糊的问题。我是CDI的新手,它的能力。当您说出具有所需范围的类时,我使用Named()注释对其进行了注释。范围如何在CDI容器中工作?您从(假设)jvm startup-shutdown开始提到AplicationScope live,并且RequestedScoped依据HTTP请求生活。我需要注释这两个豆吗? – SoftwareSavant

+0

你应该看看[http://weld.cdi-spec.org/documentation/](documentation)。至于你的问题 - '@ Named'不给这个bean任何范围,它的目标是使它成为[http://docs.jboss.org/weld/reference/latest/en-US/html_single/#_el_name](从EL可访问)。只有'@ Named'注解的Bean将默认具有'@ Dependent'范围。在下一个注释中,@ @ ApplicationScoped从** CDI容器启动**(CDI启动和魔法开始发生时的点)开始关闭。如果'@ Dependent'对你来说足够好,你就不需要注释bean(猜测不是)。 – Siliarus

+0

至于范围如何在CDI容器中工作 - 每个人都有一个不同的生命周期,在这之后它就不复存在,并且链接到它的bean将被销毁。比如在请求'@ RequestScoped' bean之后。一旦新的请求弹出,你将得到一个新的bean。你应该能够猜到'@ SessionScoped'是如何工作的。 '@ ConversationScoped'和'@ Dependent'可能会更棘手,我(再次)建议Weld文档。你也可以定义你自己的范围。 – Siliarus