Home  >  Article  >  Java  >  How to implement dynamic proxy in Java anonymous inner class?

How to implement dynamic proxy in Java anonymous inner class?

WBOY
WBOYOriginal
2024-04-30 17:36:01912browse

Anonymous inner classes can be used to implement dynamic proxy in Java, through the following steps: 1. Define the interface; 2. Create an anonymous inner class that implements the InvocationHandler interface; 3. Use the Proxy class to create a proxy object; 4. Call the proxy method. In practice, dynamic proxies can enhance or intercept method calls, such as recording method execution time.

Java 匿名内部类如何实现动态代理?

How Java anonymous inner classes implement dynamic proxies

Dynamic proxies are a technology for creating object proxies at runtime , allows enhancing or intercepting object calls without modifying the target class code. Anonymous inner classes can be used to implement dynamic proxies in Java.

1. Define the interface

First, define an interface to represent the method of the target object:

interface Target {
    void doSomething();
}

2. Create an anonymous inner class

To create a dynamic proxy, you can use an anonymous inner class to implement InvocationHandler Interface:

InvocationHandler handler = new InvocationHandler() {
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 增强或拦截方法调用
        return 1;
    }
};

3. Create a proxy object

Next, create a proxy object using the Proxy class:

Target proxy = (Target) Proxy.newProxyInstance(Target.class.getClassLoader(),
        new Class[]{Target.class}, handler);

4. Call the proxy method

Now you can call the proxy object Method, thus triggering dynamic proxy behavior:

proxy.doSomething(); // 调用代理方法

Practical case

The following is a simple example of using anonymous inner classes to implement dynamic proxy:

public class Main {
    public static void main(String[] args) {
        Target target = new TargetImpl();
        InvocationHandler handler = new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                // 增强方法调用
                long startTime = System.nanoTime();
                Object result = method.invoke(target, args);
                long endTime = System.nanoTime();
                System.out.println("方法执行时间:" + (endTime - startTime) + " 纳秒");
                return result;
            }
        };
        Target proxy = (Target) Proxy.newProxyInstance(Target.class.getClassLoader(),
                new Class[]{Target.class}, handler);
        proxy.doSomething();
    }
}

interface Target {
    void doSomething();
}

class TargetImpl implements Target {
    @Override
    public void doSomething() {
        System.out.println("原始方法执行");
    }
}

In this example, the dynamic proxy acts as a proxy for the Target interface, which performs timing enhancements before and after the original method is called.

The above is the detailed content of How to implement dynamic proxy in Java anonymous inner class?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn