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()依据需要可以改变
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);
}
}