0

私のアプリケーションでは、次のコードが使用されています。強調表示されているコードについて詳しく説明できる人はいますか?

最初に強調表示されたブロックでは、Java リフレクションがメソッド handle_validation.. の呼び出しに使用されていることを理解しましたが、詳細な説明が必要です。

次に、2 番目に強調表示されたブロックで RemoteException がスローされます。

私の正確な質問は、EngineHandlerIF を呼び出すためにリフレクションを使用した理由と、この EngineHandlerIF で RMI を使用して EngineHandler のメソッドの定義を呼び出す理由です。

private static EngineHandlerIF init() {
        ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] { "validation.xml" });
        String[] beans = ctx.getBeanDefinitionNames();
        for (String string : beans) {
            logger.info(string);
        }
        EngineHandlerIF engine = (EngineHandlerIF) ctx.getBean("engine");
        return engine;
    }



private Object callEngineMethod(MiddlewareMessage mmsg) {
        Object resultObj;
        try {
            **String methodName = "handle_validation";
            Method method = EngineHandlerIF.class.getDeclaredMethod(methodName, MiddlewareMessage.class);
            method.setAccessible(true);
            resultObj = method.invoke(engine, new Object[] { mmsg });**
        } catch (Exception e) {
            logger.error("sendMessage Exception: ", e);
            return new Boolean(false);
        }
        return resultObj;
    }

EngineHandlerIF:
----------------
**public abstract String handle_validation(MiddlewareMessage mmsg) throws RemoteException;**

EngineHandler:
--------------
public String handle_validation(MiddlewareMessage mmsg) throws Exception {
//some code
    }
4

2 に答える 2

0

最初に強調表示されたブロックでは、メソッド handle_validation の呼び出しに Java リフレクションが使用されていることを理解しましたが、詳細な説明が必要です。

それだけです。唯一の他のビットは

 method.setAccessible(true);

これにより、呼び出し元がメソッドにアクセスできるようになり (たとえば、プライベートからパブリックへ)、メソッドを呼び出すことができるようになります。ただし、上記の方法はすでに公開されているようです。おそらく、これはリファクタリング後のレガシーでしょうか?

これはRMI (リモート メソッド呼び出し) ではなく、リフレクションであることに注意してください。ここで確認できる唯一の RMI は、handle_validation()おそらくRemoteException.

于 2012-09-10T09:44:01.957 に答える
0

おそらく、誰かがリフレクションのハンマーを発見したばかりだったので、すでに公開されていたメソッドを含むすべてが馬鹿げているように見え始めたのでしょう。

ゴミです:捨ててください。メソッドを直接呼び出すだけです。

于 2012-09-10T09:47:19.630 に答える