首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用标准java功能拦截方法调用(没有AspectJ等)?

要使用标准Java功能拦截方法调用,而不使用AspectJ等第三方库,您可以使用Java的动态代理。动态代理允许您在运行时创建代理对象,以拦截方法调用并在执行原始方法之前或之后添加自定义逻辑。以下是如何使用动态代理的示例:

  1. 创建一个接口,表示要拦截的方法。
代码语言:java
复制
public interface MyInterface {
    void myMethod();
}
  1. 创建一个实现接口的类。
代码语言:java
复制
public class MyInterfaceImpl implements MyInterface {
    @Override
    public void myMethod() {
        System.out.println("Method called");
    }
}
  1. 创建一个代理工厂,用于生成代理对象。
代码语言:java
复制
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyProxyFactory {
    public static <T> T createProxy(Class<T> interfaceClass, T target) {
        return (T) java.lang.reflect.Proxy.newProxyInstance(
                interfaceClass.getClassLoader(),
                new Class<?>[]{interfaceClass},
                new MyInvocationHandler(target)
        );
    }

    private static class MyInvocationHandler implements InvocationHandler {
        private final Object target;

        public MyInvocationHandler(Object target) {
            this.target = target;
        }

        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            System.out.println("Before method call");
            Object result = method.invoke(target, args);
            System.out.println("After method call");
            return result;
        }
    }
}
  1. 使用代理工厂创建代理对象并调用方法。
代码语言:java
复制
public class Main {
    public static void main(String[] args) {
        MyInterface myInterface = new MyInterfaceImpl();
        MyInterface proxy = MyProxyFactory.createProxy(MyInterface.class, myInterface);
        proxy.myMethod();
    }
}

在这个示例中,当调用proxy.myMethod()时,代理对象会在原始方法执行之前和之后添加自定义逻辑。您可以根据需要修改MyInvocationHandler类中的invoke方法,以添加您需要的拦截逻辑。

请注意,动态代理的性能可能不如AspectJ等第三方库。如果您需要更高级的功能和性能,可以考虑使用这些库。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

13分17秒

002-JDK动态代理-代理的特点

15分4秒

004-JDK动态代理-静态代理接口和目标类创建

9分38秒

006-JDK动态代理-静态优缺点

10分50秒

008-JDK动态代理-复习动态代理

15分57秒

010-JDK动态代理-回顾Method

13分13秒

012-JDK动态代理-反射包Proxy类

17分3秒

014-JDK动态代理-jdk动态代理执行流程

6分26秒

016-JDK动态代理-增强功能例子

10分20秒

001-JDK动态代理-日常生活中代理例子

11分39秒

003-JDK动态代理-静态代理实现步骤

8分35秒

005-JDK动态代理-静态代理中创建代理类

8分7秒

007-JDK动态代理-动态代理概念

领券