我刚开始一个CDI项目。在这个项目中,Beans2被注入Beans1。 但是Beans2有一个创建文件的方法。此方法实例化文件对象,如下所示:
new File('myPathFile');
因为此实例化不是由CDI容器管理的,所以Bean2不会注入Beans1。我尝试让一个生产者将一个文件注入Beans2,但我是否需要为我将使用的所有java基类做同样的事情?
是否有另一种解决方案可以简单地使用不需要注入的类?
Bean1:
@Dependant
public class Bean1 implements Serializable {
private @Inject @Bean2Producer Bean2 bean2;
public void someMethod() {
bean2.foo();
}
}
Bean2:
@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 Producer:
@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()方法中调用新文件,则PathDir不是Inject。