动态代理简单实现-1
动态代理所需的接口类
public interface MyInterface
{
abstract public void request();
}
真实的实现类
真实类实现了以上的接口
public class MyObject implements MyInterface
{
@Override
public void request()
{
System.out.println("From real subject.");
}
}
代理类
public class DynamicSubject implements InvocationHandler
{
private Object sub;
public DynamicSubject(Object obj)
{
sub = obj; // 真实需要被调用的对象
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
System.out.println("before calling"+ method);
method.invoke(sub, args); // 调用真实对象的方法
System.out.println("after calling"+ method);
return null;
}
}
通过代理调用实现类
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyObject rs = new MyObject(); // 真实需要调用的对象
DynamicSubject invocationHandler = new DynamicSubject(rs); // 由代理器来管理、调用真实对象
Class<?> cl = rs.getClass();
// 产生代理对象,并调用真实对象
MyInterface subject = (MyInterface) Proxy.newProxyInstance(cl.getClassLoader(), cl.getInterfaces(),
invocationHandler);
subject.request();
}
}