我正在阅读Horstmann的著名书籍Core Java中的代理部分。虽然我对这个概念很陌生,但在书中写道,只有当您在编译时不知道需要实现哪些接口时,才需要使用代理。但是,当您构造代理对象时,您需要提供一个类对象数组,这些对象只是要实现的接口。这难道不听起来像是自相矛盾吗?请为我解惑。谢谢!
我正在阅读Horstmann的著名书籍Core Java中的代理部分。虽然我对这个概念很陌生,但在书中写道,只有当您在编译时不知道需要实现哪些接口时,才需要使用代理。但是,当您构造代理对象时,您需要提供一个类对象数组,这些对象只是要实现的接口。这难道不听起来像是自相矛盾吗?请为我解惑。谢谢!
不,没有自相矛盾。
你需要提供的类对象数组可以是动态的,即在运行时创建。通常可以从配置文件中读取,其中将从String
加载Class
对象。这通常是许多框架(如Spring用于依赖注入)在创建代理实例时的工作方式。
来自Proxy
javadoc的示例:
String className = readClassNameFromFile();
Class<?> myClass = Class.forName(className);
Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
new Class[] { myClass },
handler);