您的位置:首页 > 其它

动态代理简单实现-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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态代理