就像这样:一个类有一个名为 sayHello() 的方法。当类的实例调用 sayHello() 时,在调用 sayHello() 之前会自动调用另一个类中的方法。
示例代码可以是这样的:
public class Robot{
public static void doSomethingBefore(){
System.out.println("Do something before sayHello");
}
}
public class Person {
public void sayHello(){
System.out.println("hello");
}
public static void main(String[] args){
Person p = new Person();
p.sayHello();
}
}
输出结果:
Do something before sayHello
hello
看来可以通过使用代理模式来完成。但我希望它可以更简单。
使用注释:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface MethodListener {
public String className();
public String methodName();
}
然后在Person类的sayHello()方法上加上MethodListener注解,
public class Person {
@MethodListener(className="Robot",methodName="doSomethingBefore")
public void sayHello(){
System.out.println("hello");
}
public static void main(String[] args){
Person p = new Person();
p.sayHello();
}
}
当调用带有 MethodListener 注解的方法时,会自动调用 doSomethingBefore() 方法。
应该可以吗?如果可以的话,如何实现?
Check AspectJ,以及面向方面的编程框架。它会让你做类似的事情。
您会看到,为了实现这一点,您的类应该由某个容器来管理,该容器实例化您的对象并制作它们的代理。
AspectJ 有一个替代方案,即在虚拟机中插入一些“魔法”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)