动态代理模式主要由四个元素共同构成:
1. 接口,接口中的方法是要真正去实现的
2. 被代理类,实现上述接口,这是真正去执行接口中方法的类
3. 代理类,实现InvocationHandler,帮助被代理类去实现方法
测试用例:
接口:
public interface Person {
public void findWork();
}
被代理类:
public class ItWorker implements Person {
@Override
public void findWork(){
System.out.println("------ItWorker findWork");
}
}
代理类
public class LagouProxy implements InvocationHandler {
Person person = null;
public Object getInstance(Person target){
this.person = target;
Class clazz = target.getClass();
Object obj = Proxy.newProxyInstance(clazz.getClassLoader(), clazz.getInterfaces(), this);
return obj;
}
@Override
public Object invoke(Object obj, Method method, Object[] args) throws Throwable {
System.out.println("我是拉钩,我可以邦你找工作..");
//第一个参数是person,也就是被代理类的对象;第二个参数是方法中的参数
method.invoke(person, args);
System.out.println("我是拉钩,已经找完了..");
return null;
}
}
测试:
public class MyMian {
public static void main(String[] args){
Person p = (Person)new LagouProxy().getInstance(new ItWorker());
p.findWork();
}
}
结果:
我是拉钩,我可以邦你找工作..
------ItWorker findWork
我是拉钩,已经找完了..