- package test;
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Method;
- import java.lang.reflect.Proxy;
- /**
- * @author Xing,Ming
- * @version 2013年12月27日 下午4:52:08
- */
- public class Client {
- public static void main(String[] args) {
-
- RealSubject realSubject = new RealSubject();
-
- InvocationHandler handler = new DynamicSubject(realSubject);
-
- Class<?> classType = handler.getClass();
-
- /**
- * 这行代码返回的到底是个什么?就是Subject类型?还是强制转换了?
- * 为什么执行pro.request();
- * 之后会调用DynamicSubject类里面的那个method.invoke方法
- */
- Subject pro = (Subject) Proxy.newProxyInstance(classType
- .getClassLoader(), realSubject.getClass().getInterfaces(),
- handler);
-
- pro.request();
- }
- }
- interface Subject {
- public void request();
- }
- class RealSubject implements Subject {
- public void request() {
- System.out.println("From real subject");
- }
- }
- class DynamicSubject implements InvocationHandler {
- private Object sub;
- public DynamicSubject(Object sub) {
- this.sub = sub;
- }
- @Override
- public Object invoke(Object proxy, Method method, Object[] args)
- throws Throwable {
- // TODO Auto-generated method stub
- method.invoke(sub, args);
- return null;
- }
- }
复制代码
为什么会调用invoke方法,这个方法到底是做什么的啊? |