class MethodSelector implements InvocationHandler{
private Object proxied;
public MethodSelector(Object proxied) {
super();
this.proxied = proxied;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//可以增加方法的判斷 並增加內容
if(method.getName().equals("interesting"))
System.out.println("Proxy detected the interesting method");
return method.invoke(proxied, args);
}
}
interface SomeMethods{
void boring1();
void boring2();
void boring3();
void interesting(String arg);
}
class Inplementation implements SomeMethods{
@Override
public void boring1() {
// TODO Auto-generated method stub
System.out.println("boring1");
}
@Override
public void boring2() {
// TODO Auto-generated method stub
System.out.println("boring2");
}
@Override
public void boring3() {
// TODO Auto-generated method stub
System.out.println("boring3");
}
@Override
public void interesting(String arg) {
// TODO Auto-generated method stub
System.out.println("interesting"+arg);
}
}
public class SelectingMethods{
public static void main(String[] args) {
SomeMethods proxy=(SomeMethods)Proxy.newProxyInstance(
SomeMethods.class.getClassLoader(),
new Class[]{SomeMethods.class},
new MethodSelector(new Inplementation()));
proxy.boring1();
proxy.boring2();
proxy.boring3();
proxy.interesting("bonobo");
}
}