CDI - 在运行时注入类

时间:2012-03-09 17:19:54

标签: java java-ee-6 cdi

我正在开发一个项目,需要在运行时加载一些类。要加载的类是CDI-Containers的一部分,必须能够注入一些东西。 “加载类”本身也是CDI-Container的一部分。

现在出现了我的问题。可以通过反射加载和实例化任何类,但在这种情况下,不可能加载类来获取任何注入的内容。因此需要获取这些类的实例,因为它将由服务器在内部完成,就像我们使用注释@ javax.inject.Inject一样。

有没有办法加载另一个CDI容器的类,它们仍然可以使用注入(否则它没有任何意义^^)?也许有任何类负责处理所有这些类,以便我可以简单地告诉它要加载的类的名称(我会用反射做)...?

由于

2 个答案:

答案 0 :(得分:4)

您可以使用BeanManager API根据bean类型查询和处理上下文引用。

答案 1 :(得分:0)

仔细检查您的设计,因为听起来您正在进入“程序风格”编程而不是OO。这可能是您可能遇到的设计中的第一个问题。

我有一个可能有用的想法;你能让这些类实现某个接口吗?如果他们这样做,您可以使用接口在代码中使用普通的@Inject注释,然后将类实现填充到服务器上的/ lib目录中。这与CDI替代方案相结合,可以为您提供所需的产品。

更好的方法可能是使用反射和某种工厂......