JDK动态代理

package com.wh.po;

public interface IComputer {

	void add(int a,int b);
	void sub(int a,int b);
	void mul(int a,int b);
	void div(int a,int b);
}
package com.wh.po;

public class Computer implements IComputer{

	@Override
	public void add(int a, int b) {
		System.out.println(a+b); 
		
	}

	@Override
	public void sub(int a, int b) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mul(int a, int b) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void div(int a, int b) {
		// TODO Auto-generated method stub
		
	}

}
package com.wh.po;

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

public class ComputerProxy{
	
	private IComputer computer;

	public ComputerProxy(){}
	
	public ComputerProxy(IComputer computer) {
		this.computer = computer;
	}
	
	public IComputer getComputer(){
		//加载类
		ClassLoader classLoader=computer.getClass().getClassLoader();
		//代理哪些接口
		Class[] interfaces=new Class[]{IComputer.class};
		//监听
		InvocationHandler handler=new InvocationHandler(){
			
			@Override
			public Object invoke(Object arg0, Method method, Object[] args) throws Throwable {
				Object result=null;
				System.out.println("计算开始!");
				result=method.invoke(computer,args);
				System.out.println("计算结束!");
				return result;
			}
		};
		return (IComputer)Proxy.newProxyInstance(classLoader, interfaces,handler);
	}
	
	
	
	

}
package com.wh.po;

public class Test {

	public static void main(String[] args) {
		IComputer c = new ComputerProxy(new Computer()).getComputer();
		c.add(10, 5);
	}
}

  

  

posted @ 2017-05-16 22:41  奋斗的少年WH  阅读(107)  评论(0编辑  收藏  举报