java - 初始化 StandardFileSystemManager 的最佳实践是什么

标签 java xcode spring-boot refactoring

目前,我的代码如下

@Service
public class MyFileService {
    private StandardFileSystemManager manager = new StandardFileSystemManager();

    public List<FileObject> listRemoteFiles() {
        try {
            manager.init();

            manager.resolveFile(someURL);


        } finally {
            manager.close();
        }
        return Arrays.stream(remoteFiles)
                     .collect(Collectors.toList());
    }
}

但是我发现有时manager.init()会因为多次注册而抛出异常

FileSystemException :Multiple providers registered for URL scheme "file".

是否有创建此 StandardFileSystemManager 的最佳实践?所以它只注册 1 个提供商?

我猜每次我调用 listRemoteFiles() 时它都会初始化管理器。但我打算初始化一次并在最后关闭。 这可能吗?

最佳答案

您可以使用单例设计模式来确保仅创建一个 StandardFileSystemManager 对象。

我看到您正在使用@Service注释。我假设它来自 Spring 。为什么不将 StandardFileSystemManager 注册为 spring bean,然后在 MyFileService 中 Autowiring 它?默认情况下 Spring Bean 是单例的。所以你的代码看起来像

@Service
public class MyFileService {

    private final StandardFileSystemManager manager;

    @Autowired
    public MyFileService(StandardFileSystemManager manager) {
        this.manager = manager;
    }

    public List<FileObject> listRemoteFiles() {
        try {
            manager.resolveFile(someURL);
        } finally {
            manager.close();
        }

        return Arrays.stream(remoteFiles)
                     .collect(Collectors.toList());
    }
}

并且您可以将 StandardFileSystemManager 注册为任何用 @Configuration 标记的类中的 bean,如下所示

@Bean
public StandardFileSystemManager manager() {
    StandardFileSystemManager manager = new StandardFileSystemManager();
    manager.init(); 
    return manager;
}

关于java - 初始化 StandardFileSystemManager 的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52203223/

相关文章:

objective-c - 如何识别 Swift 中 SVG 对象内部的触摸?

java - 在 spring 数据中使用什么代替 fetch.EAGER ?

java - 如果 Stream 为空,如何创建不同的列表

java - 该表达式不是有效的条件表达式

iphone - 在 Xcode 中将build设置重置为默认值?

xcode - Xcode、IntelliJ Idea 和 Phonegap(又名 Cordova)的 gitignore 模板

java - 打开默认 Java 信任库的最便携方法是什么?

java - 引起原因:java.lang.NoClassDefFoundError:org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilder

java - 即使没有安全性,SpringBoot 401 UnAuthorized

spring-boot - Thymeleaf + Spring MVC + Rest