Java 有没有办法序列化方法调用
我正在寻找一种方法来记录方法调用,将其存储在数据库中,然后在以后执行它 我想序列化方法调用及其所有参数,存储它,然后检索回来,反序列化并以某种方式执行它 因此,我正在寻找一个通用方法,它允许我存储带有参数的方法调用。差不多Java 有没有办法序列化方法调用,java,serialization,Java,Serialization,我正在寻找一种方法来记录方法调用,将其存储在数据库中,然后在以后执行它 我想序列化方法调用及其所有参数,存储它,然后检索回来,反序列化并以某种方式执行它 因此,我正在寻找一个通用方法,它允许我存储带有参数的方法调用。差不多 public String myMethod(String arg1, String[] arg2) { logMethodCall(thisMethodName, allMethodArgumentsSerialized) } public void myMeth
public String myMethod(String arg1, String[] arg2) {
logMethodCall(thisMethodName, allMethodArgumentsSerialized)
}
public void myMethod()
{
if(condition) ... save it ...
else myMethodNow();
}
public void myMethodNow()
{
... do the work now ...
}
而logMethodCall
会将信息存储在数据库中
所以
a) 有没有允许我动态循环方法的所有参数并序列化它们的代码
b) 有动态获取当前方法名称的代码吗
c) 还有其他类似的想法吗?我以前没有见过这种模式,在这种模式中,您可以保存对数据库的方法调用。我见过延迟的方法调用和节流的方法调用,但它们总是在运行的应用程序中,它们不能持久存在 如果您想在将来执行持久化操作,我认为正确的方法是创建某种操作或编辑对象,就像javax.swing.undo.AbstractUndoableEdit工作一样。然后您可以在任何地方记录这些日志,并在任何地方执行它们。这些措施可以通过几种方式发挥作用,包括:
- 存储对象类型、方法名和泛型参数,并在以后执行
- 提供特定参数并调用预先确定的方法名
myMethodAction
类,其对象将参数作为属性,并且知道何时被告知执行execute
它应该调用myMethod
我也不会让myMethod
实现同时做这两件事。这将是一个巨大的头痛以后。我宁愿吃类似的东西
public String myMethod(String arg1, String[] arg2) {
logMethodCall(thisMethodName, allMethodArgumentsSerialized)
}
public void myMethod()
{
if(condition) ... save it ...
else myMethodNow();
}
public void myMethodNow()
{
... do the work now ...
}
希望能有所帮助。这听起来像是一种模式,实际的命令对象将在执行之前被持久化(可能序列化):
命令模式是一种行为设计模式,其中一个对象用于表示和封装稍后调用方法所需的所有信息。此信息包括方法名称、拥有方法的对象以及方法参数的值
嗯,我敢说,处理这种事情的自然语言是Lisp。正如他们所说,“代码=数据”
如果有使用java的需求(例如,如果这是java中较大系统的一小部分),考虑使用ABCL(以JVM为目标的LISP实现)。p>
你可以花很多时间把一个方形的钉子塞进一个圆孔,或者用简单的方法;这是你的选择。我真的不是说这是消极的;这只是一个观察。有更好的方法来处理这个问题。您是否可以指定您的实际用例,以便我们可以帮助建议一个合适的替代方案?即使您有一个合适的解决方案,稍后再次调用该方法也只会使用相同的参数重新调用相同的方法,这将重新序列化相同的参数和方法名称。那么,重点是什么呢?@JBNizet我打算用一些条件来包装logMethodCall:if(condition){logMethodCall(thisMethodName,allMethodArgumentsSerialized)}else{do rest of code}。。。。或者类似的^^^这将是问题中包含的一些很好的信息。使用命令模式设计代码也提供了更大的灵活性——一定要看一看!