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

Java 在方法期间创建多个bean实例,java,jakarta-ee,javabeans,cdi,Java,Jakarta Ee,Javabeans,Cdi,在方法期间,我可能需要生成一个下载bean来获取文件。当我同时收到这些调用时,我只想下载一次文件。我不知道用JEE/CDI表达以下伪代码的正确方法: if (download_required) { monitor.enter(); if (!map.ContainsKey(downloadPath)) { //CDI inject new instance of downloader here. downloader.File = do

在方法期间,我可能需要生成一个下载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之前,将变量注入父类,然后使用标准java和一些静态变量来实例化上述内容,是否有一种使用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);
    }
}
@Inject实例下载提供程序;
公共方法(){
Download=downloadProvider.get();
试一试{
//对下载实例执行一些操作
}最后{
downloadProvider.destroy(下载);
}
}

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

如果您使用的是JavaEE7,您可以使用
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);
    }
}
@Inject实例下载提供程序;
公共方法(){
Download=downloadProvider.get();
试一试{
//对下载实例执行一些操作
}最后{
downloadProvider.destroy(下载);
}
}
您的下载bean必须在
@相关的
范围内。

因此,该实例保证每次都是一个新实例,并且在给定的方法使用完它之前一直在范围内?因此,该实例保证每次都是一个新实例,并且在给定的方法使用完它之前一直在范围内?