在方法期间创建多个 bean 实例

Create multiple instances of beans during method

在一个方法中,我可能需要生成一个下载 bean 来获取文件。当我同时收到这些电话时,我只想下载一次文件。我不知道在JEE/CDI中表达以下伪代码的正确方法:

if (download_required) {
    monitor.enter();
    if (!map.ContainsKey(downloadPath))
    {
        //CDI inject new instance of downloader here.

        downloader.File = downloadPath;
        downloader.startDownload();
        map.put(downloadPath, downloader);
        monitor.exit();
        downloader.waitForDownload();
    } else {
        monitor.exit();
        map.get(downloadPath).waitForDownload();
    }
}

我想使用 CDI,因为我需要从 JNDI 变量设置下载器的属性。每个下载器负责下载一个文件并留下一些状态。请注意,每个下载器将被赋予不同的状态,因此必须是 bean 的新实例。

就在我放弃 CDI 之前,将变量注入父 class,然后使用标准 java 和一些静态实例化上面的内容,有没有 "correct" 方法用 CDI 实现这个?

如果您使用的是 Java EE7,则可以使用 javax.enterprise.inject.Instance:

@Inject Instance<Download> downloadProvider;

public void yourMethod() {
    Download download = downloadProvider.get();
    try {
        // do something with your download instance
    } finally {
        downloadProvider.destroy(download);
    }
}

您的下载 bean 必须在 @Dependent 范围内。