类代理Proxy的使用实例

这个类通常表示代理设置,通常为类型和套接字。Proxy是不可变的对象。

主要用于提供创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。

static object newProxyInstance(load,class,h)  返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序

接下来演示上述方法的讲解实例

1、首先我们创建一个接口类 

这个接口中定义了两个待实现的方法 geta() 是我们要触发执行的方法

getb()是一个触发方法

package ServletTest;

public interface test2 {
	public  void geta();
	public  void getb();
}

2、我们定义一个实现类 ,这里注意 什么地方使用接口 什么地方使用类 以及我们要导入的包

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

public class test implements test2 {
	public  void geta() {
		int a=5;
		System.out.println(a);
	}
	public void getb() {
		System.out.println("触发代码");
	}
	public static test2 getTest() {
        //我们创建一个类
		test t = new test();
        // 为类设置为代理
		test2 proxy = (test2)Proxy.newProxyInstance(
				t.getClass().getClassLoader(), //类记载器
				//t.getClass().getInterfaces(),// 当目标是一个具体的类的时候使用这个
				new Class[] {test2.class},  //目标对象的实现接口
				//当调用t对象 方法的时候,自动触发事务处理器
				new InvocationHandler() {
					@Override
					public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
						// TODO Auto-generated method stub
						Object ts= null;
						//当前执行的方法的方法名
						String meString = method.getName();
						System.out.println(meString);
						if("getb".equals(meString)){
						t.geta();
						//return ts;
						System.out.print("1");
						}else {
						ts = method.invoke(t, args);
						System.out.print("2");
						}
						return ts;
					}
				}
				);
		return proxy;
	}

3、我们通过代理调用我们的触发方法

test2 t = getTest();
	t.getb();

现象:当我们的getb()被调用的时候,我们的geta()也会被调用

你可能感兴趣的:(JAVA基础)