Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用@autowired存储在另一个类中动态创建的bean列表_Java_Spring - Fatal编程技术网

Java 使用@autowired存储在另一个类中动态创建的bean列表

Java 使用@autowired存储在另一个类中动态创建的bean列表,java,spring,Java,Spring,我有一个名为Drives的类,它动态实例化FsAccess bean。 我有一个名为ServersAccessService的服务类,它查找FsAccess bean并使用@autowired将它们存储在映射中。有没有办法让服务类在驱动器完成FsAccess bean的实例化后启动@autowired 服务类别: public class ServersAccessService implements DisposableBean { protected static final Log lo

我有一个名为Drives的类,它动态实例化FsAccess bean。
我有一个名为ServersAccessService的服务类,它查找FsAccess bean并使用@autowired将它们存储在映射中。有没有办法让服务类在驱动器完成FsAccess bean的实例化后启动@autowired

服务类别:

public class ServersAccessService implements DisposableBean {

protected static final Log log = LogFactory.getLog(ServersAccessService.class);

protected static Map<String, FsAccess> servers = new HashMap<String, FsAccess>();
I
protected Map<String, FsAccess> restrictedServers = new HashMap<String, FsAccess>();

protected boolean isInitialized = false;

protected static Map<String, DrivesCategory> drivesCategories = new HashMap<String, DrivesCategory>();
@Autowired
public void setServers(List<FsAccess> servers) {
    for(FsAccess server: servers) {
        this.servers.put(server.getDriveName(), server);
    }
}

如果
Drives
bean在初始化阶段实例化
FsAccess
bean,您可以通过
Drives
bean声明
ServersAccessService
bean的依赖关系。这将强制在初始化
ServersAccessService
bean之前初始化
Drives
bean。

我相信您想要的是将驱动器类设置为@Configuration bean,并使返回带有@bean注释的列表的方法。通过这种方式,spring容器知道FsAccess列表,并且可以通过@Autowired进行注入

编辑:


参考:

驱动器是否通过弹簧注射?它从何处获得创建
FsAccess
实例所需的数据?通过Spring注入是什么意思?它从uPortal获取数据。我正在为uPortal重组一个portlet。由于不熟悉uPortal的工作原理,Spring在哪里发挥作用?门户本身向
驱动器提供数据
?uPortal从active directory获取用户名和组信息等用户信息。portlet从uPortal获取该信息,并使用该信息为用户创建驱动器。这是一个公文包/文件共享portlet,因此为用户创建的驱动器实际上只是该用户共享文件夹的位置。
MyBeanFactory mbf = new MyBeanFactory();

        //loop through each drive in driveList
        for(String name:driveList)
        {

            String fullUri = "smb://naz-fs3/home/"+name;
            String icon = "/esup-portlet-stockage/img/drives/root.png";


            VfsAccessImpl drive = mbf.createInstance();

            //Set attribute information 
            drive.setDriveName(name);
            drive.setIcon(icon);
            drive.setUri(fullUri);
            drive.setContextToken(name);




        }