java动态代理入门

java动态代理:再反射类中有产生代理对象的方法,直接拿来利用。
首先我写了四个类:结构如下图所示:

首先对于接口Dog.java

package 动态代理;

public interface Dog {
public void run();
public void jump();

}

实现类:

package 动态代理;

public class Dog2 implements Dog {

	@Override
	public void run() {
		// TODO Auto-generated method stub
System.out.println("这里执行的是run方法");
	}

	@Override
	public void jump() {
		// TODO Auto-generated method stub
System.out.println("这里执行的是jump方法:");
	}

}
代理类
package 动态代理;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
//程序中生成动态代理对象可以先生成一个动态代理类,然后通过动态代理类来创建dialing对象的方式来生成一个动态代理对象,
public class ProxyAndInvocationHandler implements InvocationHandler{
/*执行代理对象所有的方法都会去执行invoke方法,其中:
proxy代表动态代理对象
method代表执行的方法
args-代表执行对象方法时传入的实参*/
	@Override
	public Object invoke(Object proxy, Method method, Object[] arg2) throws Throwable {
		// TODO Auto-generated method stub
		System.out.println("正在执行的方法:"+method);
		
		return null;
	}

	
}

测试类:

package 动态代理;

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

public class ProxyTest {
public static void main(String[] args) {
	//下边这三句是测试实现接口的;
	Dog dog1=new Dog2();
	dog1.jump();
	dog1.run();

	
	//下边是是测试动态代理的
	//创建一个invocationHandler对象
	InvocationHandler invocationHandler=new ProxyAndInvocationHandler();
	//使用一个指定的InvocationHandler来生成一个动态代理对象
	Dog dog=(Dog) Proxy.newProxyInstance(Dog.class.getClassLoader(), new Class[]{Dog.class}, invocationHandler);
//调用动态代理的run和jump方法,这里执行方法的时候,先将方法以method形式传入到invoke方法中,作为方法参数,然后执行invoke方法
	dog.jump();
	dog.run();

}
}

控制台打印如下:



猜你喜欢

转载自blog.csdn.net/handsome2013/article/details/80580451