gpt4 book ai didi

java - 如何在调用方法之前使方法成为被动方法

转载 作者:搜寻专家 更新时间:2023-11-01 02:33:46 24 4
gpt4 key购买 nike

像这样:一个类有一个名为 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();
}

然后将MethodListener注解放在Person类的sayHello()方法上,

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()方法。

是否应该可以?如果可以,如何实现?

最佳答案

检查 AspectJ ,以及面向方面的编程框架。它会让你做类似的事情。

你看,为了实现这一点,你的类应该由某个容器管理,该容器实例化你的对象并成为它们的代理。

AspectJ 通过将一些“魔法”插入 VM 来提供替代方案。

关于java - 如何在调用方法之前使方法成为被动方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3163908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com