Java中的动态代理

197 阅读1分钟

代理模式

  所谓代理模式是指,为目标对象提供一个代理对象,以替代对于目标对象的访问。代理模式的实现过程是:实现代理对象的接口,并包含一个指向目标对象的引用。Java中对于代理模式的实现是动态代理。

动态代理

  动态代理提供了Proxy和InvocationHandler两个接口,提供了对于代理模式的通用实现。典型的动态代理代码如下所示:模拟Spring中的AOP功能,在方法被调用前后插入代码。

package test;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class Test4 {
	public static void main(String[] args) {
		RealSubject target = new RealSubject();
		Subject proxy = (Subject) Proxy.newProxyInstance(target.getClass()
				.getClassLoader(), target.getClass().getInterfaces(),
				new MyInvocationHandler(target));
		proxy.request();
	}

	public static class MyInvocationHandler implements InvocationHandler {

		private Subject target;

		public MyInvocationHandler(Subject target) {
			this.target = target;
		}

		@Override
		public Object invoke(Object proxy, Method method, Object[] args)
				throws Throwable {
			System.out.println("before");
			Object result = method.invoke(target, args);
			System.out.println("after");
			return result;
		}

	}
}

interface Subject {
	void request();
}

class RealSubject implements Subject {

	@Override
	public void request() {
		System.out.println("real subject");
	}

}