【发布时间】:2015-12-05 06:40:03
【问题描述】:
我刚刚开始了一个 CDI 项目。在这个项目中,一个 Beans2 被注入到一个 Beans1 中。 但是 Beans2 有一个创建文件的方法。这个方法像这样实例化文件对象:
new File('myPathFile');
因为这个实例化不是由 CDI 容器管理的,所以 Bean2 没有注入到 Beans1 中。我试图让一个生产者将一个文件注入到 Beans2 中,但是我需要为我将使用的所有 java 基类做同样的事情吗?
是否有另一种解决方案来简单地使用不需要注入的类?
豆1:
@Dependant
public class Bean1 implements Serializable {
private @Inject @Bean2Producer Bean2 bean2;
public void someMethod() {
bean2.foo();
}
}
豆2:
@Dependant
public class Bean2 extends AbstractClass implements Serializable {
private @Inject @PathDir String pathDir;
public Bean2(String param1, boolean param2) {
super(param1, param2);
}
public void foo() {
File file = new File(pathDir);
}
}
pathDir 生产者:
@ApplicationScoped
public class ProjectProducer implements Serializable {
@Produces
@PathDir
public String getPathDir() {
try {
return PropsUtils.geetProperties().getProperty(PATH_DIR);
} catch (Exception e) {
e.printStackTrace();
}
}
}
PathDir 注释:
@Qualifier
@Target({FIELD, METHOD, PARAMETER, CONSTRUCTOR, TYPE})
@Retention(RUNTIME)
@Documented
public @interface PathDir {}
在本例中,如果在 foo() 方法中调用 new File,则 PathDir 不是 Inject。
【问题讨论】:
-
不,你不需要让所有东西都可以注射。我建议您阅读一些文档和教程,以便您真正了解使用依赖注入时您在做什么,以及最重要的是为什么。
-
我阅读了 Weld 文档和教程,但我不明白为什么当一切都不可注射时注射失败。
-
没有看到更多的代码,就不可能说出为什么事情不工作。
-
对不起,经过一些测试,它出现 pathDir,从不注入。你知道为什么吗?它正确地注入了另一个 bean
-
您仍然没有显示
pathDir的值将在哪里产生。你真的了解 CDI 的工作原理吗?