1.动态代理
Proxy
动态代理相对于静态代理,是基于字节码生成的代理类。动态代理最终会生成一个静态代理的class文件
2.静态代理类如下:
/**
* User: i Date: 17-4-28
*/
interface People{
public void study();
}
class Student implements People{
@Override
public void study() {
System.out.println("I'm studying");
}
}
public class StaticProxy implements People{
People people;
public StaticProxy(People people) {
this.people = people;
}
private void ready() {
System.out.println("I'm ready to study");
}
@Override
public void study() {
this.ready();
this.people.study();
}
public static void main(String args[]) {
Student me = new Student();
new StaticProxy(me).study();
}
}
动态代理类如下:
public class DynamicProxy implements InvocationHandler{
People people;
Object bind(People people) {
this.people = people;
return Proxy.newProxyInstance(people.getClass().getClassLoader(), people.getClass().getInterfaces(), this);
}
private void ready() {
System.out.println("I'm ready to study");
}
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
if (method.getName().equals("study"))
ready();
return method.invoke(people, objects);
}
public static void main(String args[]) {
Student me = new Student();
People people = (People) new DynamicProxy().bind(me);
people.eat();
}
}