动态代理简单实现-1
2015-06-10 15:56
239 查看
动态代理简单实现-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(); } }
相关文章推荐