在方法期间创建多个 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
范围内。
在一个方法中,我可能需要生成一个下载 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
范围内。