Java中的静态代理与动态代理案例
整理Java开发中对这方面的使用,文章持续更新。
本文章仅供产考,如有不符,欢迎留言评论。
代理思路:
假如你喜欢隔壁班一个女孩,但是你不敢去表白,而你恰巧认识她班里的一个同学,
这时你准备了一封情书,代理你朋友转交给她,然后你们两个就幸福的在一起了。
静态代理实现
1、创建服务接口
package Proxy.StaticProxy;
public interface IStaticService {
public void girl();
}
2、创建人员类与静态代理类
package Proxy.StaticProxy;
public class Person implements IStaticService {
@Override
public void girl() {
System.out.println("牵手成功");
}
}
package Proxy.StaticProxy;
public class StaticProxy implements IStaticService{
private IStaticService service;
@Override
public void girl() {
System.out.println("表白");
service.girl();
System.out.println("领回家");
}
public StaticProxy(final IStaticService staticService){
this.service=staticService;
}
}
3、创建主方法调用
package Proxy.StaticProxy;
public class MainProxy {
public static void main(String[] args) {
IStaticService service=new Person();
StaticProxy proxy = new StaticProxy(service);
proxy.girl();
}
}
动态代理
动态代理不用手动创建代理,通过InvocationHandler接口自动创建
1、创建动态代理类
package Proxy.DynamicProxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class DynamicProxy implements InvocationHandler {
private Object object;
public DynamicProxy(final Object object){
this.object=object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("你好");
Object result= method.invoke(object,args);
return result;
}
}
2、创建主方法调用
package Proxy.DynamicProxy;
import Proxy.StaticProxy.IStaticService;
import Proxy.StaticProxy.Person;
import java.lang.reflect.Proxy;
public class MainProxy {
public static void main(String[] args) {
IStaticService service=new Person();
IStaticService instance = (IStaticService)Proxy.newProxyInstance(
IStaticService.class.getClassLoader(),
new Class[]{IStaticService.class},
new DynamicProxy(service));
instance.girl();
}
}