java - 没有 if-else 的 Spring 限定符

标签 java spring if-statement

我使用 Spring 框架。我想提供创建文件的服务。我有两种类型的存档。我想知道另一种不使用 if-else 语句的方法。

界面

public interface Archive {
     public String makeArchive();
}

实现1

@Component
public class ArchiveRAR implements Archive {
    @Override
    public String makeArchive() {
        return "I made archive RAR.";
   }
}

实现2

@Component
public class ArchiveZIP implements Archive {
    @Override
    public String makeArchive() {
        return "I made archive ZIP.";
    }
}

服务

@Service
public class RunnerApp implements CommandLineRunner {

    @Autowired
    @Qualifier("archiveRAR")
    Archive archiveRAR;

    @Autowired
    @Qualifier("archiveZIP")
    Archive archiveZIP;

    @Override
    public void run(String... strings) throws Exception {

        Report report = new Report("ZIP");
        //HERE
        if ("RAR".equals(report.getType())) {
            System.out.println(archiveRAR.makeArchive());
        } else if ("ZIP".equals(report.getType())) {
            System.out.println(archiveZIP.makeArchive());
        }

   }
}

主应用

@SpringBootApplication
public class MainApp {
    public static void main(String[] args) throws Exception {
         SpringApplication.run(MainApp.class, args);
    }
}

谢谢。

最佳答案

我建议您在这里使用工厂模式而不是 if-else 语句:

@Component
public class ArchiveFactory {
    @Autowired
    private Map<String, Archive> archives;

    public Archive getArhive(String archiveType) {
        return archives.get(archiveType);
    }
}

这样你的主要方法将是:

@Service
public class RunnerApp implements CommandLineRunner {

    @Autowired
    private ArchiveFactory archiveFactory;

    @Override
    public void run(String... strings) throws Exception {

        Report report = new Report("ZIP");
        Archive archive = archiveFactory.get(report.getType());
        System.out.println(archive.makeArchive());
   }
}

当然你还需要定义类型为 Map<String, Archive> 的 bean .

关于java - 没有 if-else 的 Spring 限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47219689/

相关文章:

java - UnsatisfiedDependencyException : Error creating bean with name 'entityManagerFactory'

java - 如何返回程序中的步骤?

c++ - 然后在 C++ 条件

swift - Swift 中 Unresolved 标识符错误?

java - Spring Boot Controller 重定向到/模板jsp页面不工作

java - Opencv 打开视频文件但捕获 isOpened 始终为 false

Java 泛型 : Build Parameterized Classes for every inner class

java - NetworkOnMainThreadException 但使用 AsyncTask

java - 用于 REST Controller 的 Spring MVC 4,如何为测试用例 Autowiring 不同的依赖项

java - .class 文件中缺少 @Autowired 注释