1.主业务接口
interface ISubject1{
public void eat(String msg,int num);
}
2.主业务
class RealSubject2 implements ISubject1{
@Override
public void eat(String msg, int num) {
System.out.println ("我要吃"+num+"分量的"+msg );
}
}
3.增强业务
/用于增强真是业务类对象的(被代理对象)
class ProxySubject2 implements InvocationHandler{
private Object target; //绑定任意接口的对象,使用Object来描述
//实现真实对象的绑定处理,同时返回代理对象
public Object bind(Object target){
this.target=target;
return Proxy.newProxyInstance ( target.getClass ().getClassLoader (),target.getClass ().getInterfaces (),this );
}
public void preHandle(){
System.out.println ("方法处理前" );
}
public void afterHandle(){
System.out.println ("方法处理后" );
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //动态代理接口所提供的方法
this.preHandle ();
Object ret=method.invoke ( this.target,args );
this.afterHandle ();
return ret;
}
}
4.测试
public class Test {
public static void main(String[] args) {
ISubject1 realSubject =new RealSubject2 ();
ISubject1 subject = (ISubject1) new ProxySubject2 ( ).bind ( new RealSubject2( ) );
subject.eat ("apple",30);
}
}
5.测试结果