我正在寻找一个方法被执行的java实现,当该类中的任何其他方法被调用时,其他方面(像@before对Junits所做的那样)
我不喜欢使用JAspect。 (仅仅因为我不想拥有一个Spring配置文件,如果没有Spring XML配置就可以了)
简单示例
public class Reader {
private void init(){}
private void method1(){}
private void method2(){}
}
这里每次调用method1或method2时,都必须调用init()。
提前致谢
答案 0 :(得分:2)
您可以尝试使用Javassist调整您的实施。你可以找到一个很好的介绍here。以下代码片段取自教程(略微适应),并展示了如何操作字节码以插入其他命令:
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();
}
}
答案 1 :(得分:1)
你应该看看代理模式。
JAVA已经提供了这种机制。它被称为动态代理。
看看这个:http://tutorials.jenkov.com/java-reflection/dynamic-proxies.html
或者搜索" JAVA动态代理"。你会发现很多资源。
一些理论:有三种可能的做法: