动态代理作用:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
这里实例的实现主要是通过java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口来实现的,Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现。
代码如下:
测试结果:[list]
[*]中介:房屋信息已发布!
[*]A前往查看房子!
[*]中介:客户已接待完!
[/list]
这里实例的实现主要是通过java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口来实现的,Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现。
代码如下:
package com.ruixingsoft;
/**
* 租房接口
*
* @author ledefe
*
*/
public interface Rent {
/**
* 前往查看房子
*/
public void View();
}
package com.ruixingsoft;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* 房屋中介
*
* @author ledefe
*
*/
public class RentHandler implements InvocationHandler {
private Object rentObj;
public RentHandler(Object obj) {
this.rentObj = obj;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("中介:房屋信息已发布!");
method.invoke(rentObj, args);
System.out.println("中介:客户已接待完!");
return null;
}
}
package com.ruixingsoft;
/**
* A客户-租房
*
* @author ledefe
*
*/
public class ARentImpl implements Rent {
public void View() {
System.out.println("A前往查看房子!");
}
}
package com.ruixingsoft;
import java.lang.reflect.Proxy;
public class RentTest {
/**
* 动态代理测试
*
* @param args
*/
public static void main(String[] args) {
// xx的代理接口:A客户
Rent rent = new ARentImpl();
// xx的代理实现类:房屋中介
RentHandler handler = new RentHandler(rent);
// 实例化一个xx接口的代理
Rent proxy = (Rent) Proxy.newProxyInstance(rent.getClass().getClassLoader(), rent.getClass().getInterfaces(), handler);
proxy.View();
}
}
测试结果:[list]
[*]中介:房屋信息已发布!
[*]A前往查看房子!
[*]中介:客户已接待完!
[/list]