我想从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();
答案 0 :(得分:0)
您可以使用javassist http://www.csg.ci.i.u-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);
}
}