java - "Inject"接口(interface)实现成java类

标签 java

我正在写一些看起来像这样的东西(当然它比这个示例复杂一点):

public class DoOnAll {

    private List<IActionPerformer> actionPerformers;

    public DoOnAll(List<IActionPerformer> actionPerformers) {
        this.actionPerformers = actionPerformers;
    }

    public void callFromSomeWhere(String path) {
        File f = new File(path);
        List<File> list = Arrays.asList(f.listFiles());
        for (File file : list) {
            for (IActionPerformer action : actionPerformers) {
                action.perform(file);
               }
        }
    }

}

public interface IActionPerformer {
    public void perform(File file);
}

public class SomePerformer implements IActionPerformer {

    public void perform(File file) {
        if (getFileType(file) = ".txt") {
            doSomething
        }
    }
}

我有两个问题:

  1. 我是否应该将 SomePerformer 中的条件移动到另一个方法,例如 boolean accept(File file),并将此方法声明添加到接口(interface)中? 如果是这样,我将如何“收集”DoOnAll 中所有已接受的类?只是遍历 actionPerformers 列表并将所有已接受的添加到另一个列表,然后遍历已接受的列表并对它们执行 .perform 吗?还是方法论中有其他常用的方法?

  2. 有哪些方法可以将actionPerformrs 列表注入(inject)到类中? 我想编写独立的实现并在一个文件中定义,比如 xml 文件,将哪些注入(inject)到列表中。

最佳答案

在回答你的第二个问题时,你应该查看 dependency injection . Java 有一些很好的框架可以为您做这件事,例如:

Spring 尤其允许您在 XML 文件中定义应用程序的组件和依赖项。有关示例,请参见:

最后一个链接有一个关于构造函数注入(inject)的小节:创建 java 对象,并根据您的类 DoOnAll 要求为其构造函数提供依赖项。

关于java - "Inject"接口(interface)实现成java类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8893580/

相关文章:

从 SOAPFault 中提取错误消息时出现 java.lang.ClassCastException

java - 我的程序需要计算一个单词中字母出现的次数,但它似乎只计算字母 'a' 的出现次数

java - 为什么rabbitmq fanout Exchange只能收到一个订阅消息?

java - 如何将字符串变量插入到 Cucumber-JVM 中的步骤定义中?

java - hibernate 4.1.9 : Which jar files do I need?

java - 使用 Mockito 使用 @Value 时如何模拟 map

java - 如何在 Java 中比较字符串?

java - 在 Android Eclipse 环境中链接到其他项目的问题

SQL 的 Java 日期格式

java - FileNotFoundException 通过 HTTPS 使用 java webstart 1.6 启动 1.4.2 webstart 应用程序