Proxy

动态Proxy:

运行时态在调用原有方法(必须实现于某个接口)的前面或者后面执行相应的操作。
下面的代码可能是一个jar包里面的代码,已经编译过的。

interface Phone{
	public void PlayMusic();
	public void PlayGames();	
}

class IPhone implements Phone{
	public void PlayMusic(){
		System.out.println("ITune music");
	}
	
	public void PlayGames(){
		System.out.println("ITune game");
	}
}


在拿到jar之后,只能看到Phone接口的描述文件,如果要在执行方法的时候打印一些日志出来。在jar包不可能修改的情况下,这时候就需要Proxy来实现这个功能了:
class InvocationHandlerImpl implements InvocationHandler 
{
	Object target;
	public void setTarget(Object target){
		this.target = target;
	}
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object result;
		System.out.println("I will " + method.getName());
		result = method.invoke(target, args);
		return result;
	}
	
}

测试代码:
public class DynamicProxy {
	public static void main(String []args){
		InvocationHandlerImpl ih = new InvocationHandlerImpl();
		ih.setTarget(new IPhone());
		Phone p1 = (Phone)Proxy.newProxyInstance(IPhone.class.getClassLoader(), IPhone.class.getInterfaces(), ih);
		p1.PlayGames();
	}
}

想明白spring有什么用了...

你可能感兴趣的:(spring)