您的位置:首页 > 编程语言 > Java开发

Java 反射 动态代理 切面编程

2017-12-11 17:40 411 查看
-实现类
package com.proxy.impl;

import com.proxy.Salary;

public class SalaryImpl implements Salary {

    @Override

    public void doSalary(Integer num,Integer num2) {

        System.out.println("computing ............"+num+"------"+num2);

    }

}

package com.proxy.impl;

import com.proxy.Tips;

public class TipsImpl implements Tips {

    @Override

    public void before() {

        System.out.println("tips before.......");

    }

    @Override

    public void after() {

        System.out.println("tips after.......");

    }

}

--接口类

package com.proxy;

public interface Tips {

    public void before();

    public void after();

}

package com.proxy;

public interface Salary {

    public void doSalary(Integer num,Integer num2);

}

--代理类

package com.proxy;

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

import java.lang.reflect.Proxy;

public class SimpleProxy implements InvocationHandler {

    private Tips tips;

    private Object obj;

    // 绑定代理对象

    public Object bind(Tips tips, Object obj) {

        this.tips = tips;

        this.obj = obj;

        return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);

    }

    // 实现代理

    @Override

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        Object result = null;

        tips.before();

        result = method.invoke(obj, args);

        tips.after();

        return null;

    }

}

--调用类  new TipsImpl()依据需要可以改变

package com.proxy;

import com.proxy.impl.SalaryImpl;

import com.proxy.impl.TipsImpl;

public class Client {

    public static void main(String[] args) {

        SimpleProxy proxy = new SimpleProxy();

        Salary salary = (Salary)proxy.bind(new TipsImpl(), new SalaryImpl());

        salary.doSalary(11,12);

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: