java 实现 方法执行前执行一个方法
时间: 2024-01-23 09:01:53 浏览: 27
可以使用 Java 中的代理(Proxy)来在方法执行前执行另一个方法。
具体实现步骤如下:
1. 定义一个接口,包含要被代理的方法和前置方法。
```java
public interface MyInterface {
void doSomething();
void doSomethingBefore();
}
```
2. 实现该接口的类,并在其中实现要被代理的方法和前置方法。
```java
public class MyClass implements MyInterface {
@Override
public void doSomething() {
System.out.println("真正要执行的方法");
}
@Override
public void doSomethingBefore() {
System.out.println("执行前的方法");
}
}
```
3. 编写代理类,实现 InvocationHandler 接口,并在 invoke() 方法中执行前置方法和要被代理的方法。
```java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class MyProxy implements InvocationHandler {
private Object target;
public MyProxy(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 执行前置方法
target.doSomethingBefore();
// 执行要被代理的方法
Object result = method.invoke(target, args);
return result;
}
}
```
4. 在主方法中使用代理类来创建代理对象,并调用代理对象的方法。
```java
import java.lang.reflect.Proxy;
public class Main {
public static void main(String[] args) {
MyClass myClass = new MyClass();
MyInterface proxy = (MyInterface) Proxy.newProxyInstance(MyInterface.class.getClassLoader(),
new Class[]{MyInterface.class},
new MyProxy(myClass));
proxy.doSomething();
}
}
```
当调用代理对象的 doSomething() 方法时,会自动先执行 doSomethingBefore() 方法,然后再执行真正要被代理的方法。