2

我想要一个来自 cglib 或一些包装类的易于使用的 API 来实现以下类转换,以便在我使用该类时不涉及任何代理。

@Entity
public class SomeProcess extends SomeProcessBase implements Serializable {

@ToBeTransformed
public void start() {
    //do some business logics
}

}

转换类后,我希望它会是这样的:

@Entity
public class SomeProcess extends SomeProcessBase implements Serializable {

public void start() {
    Executor.execute(new Executable() {
        public void execute() {

          //do some business logics

        }
    });

}

}

所以当我想调用 someProcess.start 时,我可以直接使用下面的代码:

SomeProcess process = new SomeProcess();
process.start();

以外

SomeProcess process = new SomeProcess();
SomeProcess processProxy = Proxy.wrapper(process);
processProxy.start();
4

1 回答 1

0

您可以使用 javassist http://www.csg.ci.iu-tokyo.ac.jp/~chiba/javassist/tutorial/tutorial.html即时更改课程。像这样的东西:

    ClassPool pool = ClassPool.getDefault();
    CtClass sp = pool.get("SomeProcess");
    for (CtMethod m : sp.getDeclaredMethods()) {
        if (m.hasAnnotation(ToBeTransformed.class)) {
            String body = // create new body 
            m.setBody(body);
        }
    }
于 2013-09-27T14:19:14.797 回答