技术开发 频道

关于Java常用工具您不知道的5件事

  清单 4. Jeeves 实现了 IPersonalServant

import java.io.*;

public class Jeeves
    implements IPersonalServant
{
    
public void process(File f)
    {
        System.out.println(
"Very good, sir.");
    }
    
public boolean can(String cmd)
    {
        
if (cmd.equals("fetch tea"))
            return
true;
        
else
            return
false;
    }
}

  剩下的就是配置包含实现的 JAR 文件,让 ServiceLoader 能识别 — 这可能会非常棘手。JDK 想要 JAR 文件有一个 META-INF/services 目录,它包含一个文本文件,其文件名与接口类名完全匹配 — 本例中是 META-INF/services/IPersonalServant。接口类名的内容是实现的名称,每行一个,如清单 5:

  清单 5. META-INF/services/IPersonalServant

Jeeves   # comments are OK

  幸运的是,Ant 构建系统(自 1.7.0 以来)包含一个对 jar 任务的服务标签,让这相对容易,见清单 6:

  清单 6. Ant 构建的 IPersonalServant

<target name="serviceloader" depends="build">
        
<jar destfile="misc.jar" basedir="./classes">
            
<service type="IPersonalServant">
                
<provider classname="Jeeves" />
            
</service>
        
</jar>
    
</target>

  这里,很容易调用 IPersonalServant,让它执行命令。然而,解析和执行这些命令可能会非常棘手。这又是另一个 “小线头”。

0
相关文章