AOP的实现方式

来源:互联网 发布:什么是淘宝店铺推广 编辑:程序博客网 时间:2024/06/05 15:22

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();    }}




0 0
原创粉丝点击