package com.java.design.proxy;
public interface Person {
void doSomething();
}
package com.java.design.proxy;
public class Tom implements Person{
@Override
public void doSomething() {
System.out.println("Tom doSomething.....");
}
}
package com.java.design.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class JDKDynamicProxy implements InvocationHandler {
private Person person;
public JDKDynamicProxy(Person person) {
this.person = person;
}
public Object getObject(){
return Proxy.newProxyInstance(person.getClass().getClassLoader(), person.getClass().getInterfaces(),this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("执行目标方法之前......");
Object invoke = method.invoke(person, args);
System.out.println("执行目标方法之后......");
return invoke;
}
}
package com.java.design.proxy;
public class ProxyTest {
public static void main(String[] args) {
System.out.println("原始类进行调用");
Person person = new Tom();
person.doSomething();
System.out.println("---------------------------------");
System.out.println("使用代理类方法进行调用");
Person proxyPerson = (Person) new JDKDynamicProxy(new Tom()).getObject();
proxyPerson.doSomething();
}
}
设计模式——代理模式
于 2023-02-12 23:06:18 首次发布
该代码示例展示了Java中使用JDK动态代理实现的方法。首先定义了一个Person接口,然后创建了其实现类Tom。接着,创建了一个JDKDynamicProxy类,实现了InvocationHandler接口,用于在调用目标方法前后添加额外操作。在主函数中,对比了直接调用原始类和使用代理类进行方法调用的区别。
672

被折叠的 条评论
为什么被折叠?



