我是否需要通过CDI中的生产者进行所有对象实例化

时间:2015-09-09 10:27:36

标签: java cdi weld-se

我刚开始一个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。

0 个答案:

没有答案