如何将对象注入jar中的类?

时间:2015-01-16 20:50:27

标签: java sockets code-injection

我创建了一个放入jar的SocketClient对象,我想在运行java程序时调用它,以便socket启动然后我可以通过外部应用程序连接到它。如何在程序开始时调用该对象。

SocketClient

public class SocketClient {

    private boolean isCon = false;

    public SocketClient() {

    }

    public void communicate() {
        while(!isCon) {
            try {
                Socket socket = new Socket("localHost", 9090);
                System.out.println("Connected");
                isCon = true;
                ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
                AbstractScript passScript = getAbstractScript();
                System.out.println("Passing Object");
                oos.writeObject(passScript);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }


    public AbstractScript getAbstractScript() throws Exception {
        Class reflectClass = AbstractScript.class;
        Object construct;
        construct = reflectClass.newInstance();
        AbstractScript newAbstractScript = (AbstractScript) construct;
        return newAbstractScript;
    }

    public boolean isRunningScript() throws Exception {
        Method method;
        Class reflectClass = AbstractScript.class;
        if(reflectClass != null) {
            method = reflectClass.getDeclaredMethod("isRunning", Boolean.class);
            try {
                Object returnValue = method.invoke(null);
                Boolean value = (Boolean) returnValue;
                return value;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return false;
    }
}

1 个答案:

答案 0 :(得分:0)

让我们考虑一个简单的例子,它可以帮助你做你想做的事。

假设您将SocketClient类编译为名为MySocketStuff.jar的jar文件,并将外部应用程序打包到名为MyApplication.jar的jar中

为了让您的外部应用程序使用您的SocketClient类,您只需确保在运行应用程序时jar位于类路径中,因此类加载器将加载这些类。

然后您可以像在任何其他开发环境中一样使用该类。

假设您的main方法有这样简单的事情:

import my.socket.stuff.package.SocketClient;  // you'll need the jar on your class path when you compile this file!

public class MyMainClass {
    public static void main(String[] args) {
        // instantiate the object
        SocketClient mySocketClient = new SocketClient(); // create the object
        // do stuff
        mySocketClient.communicate();
        // ...
    }
}

一旦你编译了这个jar(你可以决定是否要在jar中包含导入的类......),你可以从命令行调用你的程序,如下所示:

java -cp "<path to MySocketStuff.jar>;<path to MyApplication.jar>" MyMainClass

这有帮助吗?