[英]Executing a method, when any other method in that class is called other then Aspect
我正在寻找一个方法被执行的Java实现,当该类中的任何其他方法都称为Aspect之后(类似于@before为Junits做的事情)
我更喜欢不使用JAspect。 (只是因为我不想有一个Spring配置文件,如果没有Spring XML配置,可能的话)
简单的例子
public class Reader {
private void init(){}
private void method1(){}
private void method2(){}
}
在这里,每次调用method1或method2时,都必须调用init()。
提前致谢
您可以尝试使用Javassist调整实现。 您可以在这里找到很好的介绍。 以下代码段摘自该教程(略有改编),并显示了如何操作字节码以插入其他命令:
public class Hello {
public void say() {
System.out.println("Hello");
}
public void ask() {
System.out.println("HM?");
}
}
public class Test {
public static void main(String[] args) throws Exception {
ClassPool cp = ClassPool.getDefault();
CtClass cc = cp.get("Hello");
CtMethod m = cc.getDeclaredMethod("say");
m.insertBefore("{ ask(); }");
Class c = cc.toClass();
Hello h = (Hello)c.newInstance();
h.say();
}
}
您应该看一下代理模式。
JAVA已经提供了这种机制。 它称为动态代理。
检查一下: http : //tutorials.jenkov.com/java-reflection/dynamic-proxies.html
或搜索“ JAVA动态代理”。 您会发现大量的资源。
一些理论:您可以根据需要执行三种操作:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.