「Java」- Dynamic Proxy

  CREATED BY JENKINSBOT

动态代理模式主要由四个元素共同构成:

  1. 接口,接口中的方法是要真正去实现的
  2. 被代理类,实现上述接口,这是真正去执行接口中方法的类
  3. 代理类,实现InvocationHandler,帮助被代理类去实现方法
  4. 测试用例:

代码示例

  1. 接口:
public interface Person {
	void searchHouse();
}

  1. 被代理类Master,实现上述接口:
public class Master implements Person {
	void searchHouse(){
		System.out.println("I'm Mater.");
	};
}

  1. 代理类HomeLine,实现InvocationHandler接口
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class HomeLink implements InvocationHandler{

	private Person target;

	public Object getInstance(Person target){
		this.target = target;
		Class clazz = target.getClass();

		return Proxy.newProxyInstance(clazz.getClassLoader(), clazz.getInterfaces(), this);
	}

	@Override
	public Object invoke(Object obj, Method method, Object[] args) throws Throwable {
		System.out.println("HomeLink Start...");
		//第一个参数是target,也就是被代理类的对象;第二个参数是方法中的参数
		method.invoke(target, args);
		System.out.println("HomeLink End...");

		return null;
	}
}

4.测试用例:

public class TestSearchHouse {
	public static void main(String[] args) {
		Person person = (Person) new HomeLink().getInstance(new Master());
		person.searchHouse();
	}
}

  1. 运行结果如下:

HomeLink Start…
I’m Mater.
HomeLink End…

使用

通过动态代理,可以拦截到未知类的方法调用。

参考文献

JAVA设计模式之动态代理